Merge master into fancy-expand (using imerge)

master
Jens Ayton 2015-01-04 15:07:46 +01:00
commit f1d2070420
370 changed files with 234476 additions and 60414 deletions

View File

@ -164,7 +164,7 @@ function inspect()
Oolite Debug OXP
Copyright © 2007-2013 the Oolite team
Copyright © 2007-2014 the Oolite team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@ -186,15 +186,15 @@ SOFTWARE.
*/
this.name = "oolite-debug-console";
this.author = "Jens Ayton";
this.copyright = "© 2007-2013 the Oolite team.";
this.description = "Debug console script.";
this.version = "1.77";
this.version = "1.81";
(function() {
"use strict";
this.inputBuffer = "";
this.$ = null;

View File

@ -0,0 +1,11 @@
{
title = "Oolite Debug OXP";
identifier = "org.oolite.oolite.debug";
version = "1.81";
required_oolite_version = "1.81";
license = "GPL 2+ / CC-BY-NC-SA 3.0 - see LICENSE.TXT for details";
author = "Giles Williams, Jens Ayton and contributors";
information_url = "http://www.oolite.org/";
}

View File

@ -1,3 +1,3 @@
{
version = "1.79";
version = "1.81";
}

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,434 @@
Changes between Oolite 1.80.1 and Oolite 1.82:
General:
========
* More AI improvements
* Heat cooldown slower
* Installation time now on equipment purchase screen
* OXZ installer now updates dependency check after each install
* Added zooming, scrolling galaxy chart
* Internal damage from missiles now more serious
* Damaged equipment now sorts to the top of the status screen
Graphics:
=========
* ECM bursts now have an effect on the scanner
* Spacedust fades out when entering atmosphere
Expansion pack manager:
=======================
* Installation status now updated without having to restart manager
* Missing requirements will be installed automatically if possible
Expansion pack development:
===========================
General:
--------
* mission.setInstructions() can now take an array as its first
parameter. The first element will be a heading on the manifest
screen, with the remaining elements being mission entries.
If multiple entries have the same heading, they are grouped.
* Subentities now inherit their parent's entity personality - useful
for shader randomisation.
* New trade-goods.plist allowing definition of customised trade goods
* New market scripts for JS-based modification of markets
* OXP Developer builds will now warn about deprecated code in OXPs.
Plists:
-------
* oolite-font.plist: new f6KernGovernment and f6KernTechLevel options
* equipment.plist: installation_time, repair_time
* descriptions.plist: long-range-chart-title-G-S now allows chart title
to vary from system to system
* commodities.plist and illegal-goods.plist replaced by trade-goods.plist
* shipdata.plist: market_broadcast, market_capacity, market_definition, market_monitored, market_script properties for stations
* planetinfo.plist: market_script property for systems
Properties:
-----------
* Removed manifest.liquor/wines, manifest.liquorWines, manifest.gemStones
manifest.alienItems aliases for trade goods
Methods:
--------
* manifest.comment()
* manifest.setComment()
* manifest.setShortComment()
* manifest.shortComment()
* systemInfo.samplePrice()
Bug fixes:
==========
* Restore something like the 1.76 behaviour in terms of alloy plates in debris
* Speech synthesis slightly more conservative in detecting 'credits'
abbreviation
-------------------------------------------------------------------------------
Changes between Oolite 1.80 and Oolite 1.80.1:
* Fix non-alphanumeric characters not being available on mission screen
* Fix problem with large OXZ downloads on Windows
* Fix some problems with docking of fast and fast-turning ships
* Fix display problem with sun corona in rare cases
* Fixed key 5 switching to status screen when used during save game
filename entry.
* Fix Linux uninstall script error handling
* Fix errors with escape pod launch from subentities
* Fix consistency errors on ship library screen
* Ship registration forms now return to interfaces page
* Fix error with "OUTER_SYSTEM" positions in very large systems
* Fix bug where ship.checkScanner would detect a docked player and other
invalid targets.
* Windows and Linux ports: Gamma is now a generic game option, not a save
file one. Fixes unexpected gamma resets when starting a new game.
* Windows port: Fixed unnecessary double OpenGL initializations under
certain resize window conditions.
* Fix return type of EquipmentInfo.requiredCargoSpace
* Handle sun glare correctly also for too tall or too wide game windows.
-------------------------------------------------------------------------------
Changes between Oolite 1.78 and Oolite 1.80:
General:
========
* Automatic expansion pack installer now available (not all existing
expansion packs are available for automatic installation; manual
installation still possible as before)
* New game start screen, including access to a keyboard control
summary and a ship specification library
* New Tutorial option for starting a game, for a basic flight training
course
Gameplay:
=========
* Coordinate precision increased, allowing ships to travel much
further from the witchpoint without problems
* Strict mode now only disables OXPs rather than making other gameplay
changes
* Ship hostility indicator no longer depends on weapon range
* New equipment: Integrated Targeting System
* Standard HUDs now include primable equipment dials, compass target
naming, and multi-function displays. HUD layouts reorganised
slightly to fit the extra components in. ';' and ':' keys manage
multi-function display (MFD) selection
* Major changes to NPC behaviour and AIs, including new courier,
smuggler, assassin, pirate leader, bounty hunter leader, pirate
raider, thargoid raider and police blockade roles. Significant
increases in diversity of ships used for existing roles.
* Widened the difficulty gap between Corporate States (now safer) and
Anarchy (now far more dangerous) systems. System danger now also
depends to an extent on events in neighbouring systems.
* Saving the game at stations other than the main system station is
now possible; stations added by expansion packs must be flagged by
the expansion pack as valid save locations for this to work.
* Save game file name and player commander name are now
independent. Interface added on F4 to set player commander name and
player ship name.
* Docking computers now fly a bit faster
* Improved short-term and long-term assessment of player actions for
more realistic and varied NPC responses
* Parcel and passenger contracts made much more varied. High-price
high-risk contracts added. Reputation scale increased.
* Station rotation slowed down
* Number of cargo containers used by Gold, Platinum, Gems (e.g. after
scooping) now shown on the manifest screen.
Graphics:
=========
* Graphics settings have changed to merge "shader settings" and
"reduced detail" into a single option. There is an 'extra detail'
option suitable for dedicated graphics cards.
* New look for the sun, including improved corona and a glare effect
* New explosion graphics
* Core ship models and textures replaced with significantly improved
ones by Griff/CaptSolo
* New planet and atmosphere graphics (requires 'extra detail')
* Default HUD adjusted a little to improve appearance of text
Sound:
======
* Now uses the OpenAL library to give fully positional sound. Supports
stereo speakers up to 7.1 or binaural HRTF with headphones.
* iTunes integration works again with iTunes 11 on the Mac.
Controls:
=========
* Default key for dump cargo now "Shift-D", not "d", to reduce chance
of pressing accidentally
* Number pad keys can now be bound independently of arrow keys
* Number keys can now be bound independently of function keys
* GUI direction keys now independent of flight direction keys
* With an Advanced Navigation Array, the '?' key now cycles through
different colour highlights
* New ';' and ':' keys for multi-function displays
* 'tab' and '0' keys are now fast activation keys for primable
equipment. Equipment previously using those keys has been rewritten
to be primable equipment and will automatically be initially
assigned to those keys if it is installed. New interface on F4 to
rebind these keys.
* New joystick axis configuration interface, allowing much more
precise control
Settings:
=========
* --noshaders command line option to temporarily start Oolite without
shader support, for debugging graphics card problems.
* Windows and Linux ports: Default spoken messages voice changed to
female.
Expansion pack development:
===========================
Packaging:
----------
* New compressed OXZ format for easy - and automatic - expansion pack
distribution.
* Default Javascript properties set from manifest.plist
General:
--------
* The system populator is now run via Javascript and can be modified
by expansion pack scripts. There is also a system repopulator to
allow replacement of expected ship losses or departures.
* shipdata.plist reorganised to make heavy use of templates. This
allows shipset OXPs to be written to take advantage of future
changes to core shipdata.
* Javascript may be used as a language for ship AIs. Numerous extra JS
properties, methods and handlers have been added to allow this.
* Priority-based AI library available for writing Javascript AIs in,
with a wide range of predefined behaviours and easy addition of
custom behaviours
* Multi-function displays for arbitrary persistent in-flight text display
* Primable equipment dial added to HUD
* Sun colour and background star colour are now separated
* Ship cargo is now defined when ships are created
* Mission screens can now have an arbitrary text entry prompt
* Waypoints can be added - like a compass target, but not attached to
any other entity.
* [oolite_key_FOO] description expansion describes keyconfig entry key_FOO
* Javascript representation for ship exhausts
* Wormholes have a read-only Javascript representation
* Javascript representation for flashers
* Description and mission text expansions now use a much better random
number generator
New properties:
---------------
* entity.isWormhole
* oolite.gameSettings.keyConfig
* planet.name
* player.cargoReputationPrecise
* player.parcelReputationPrecise
* player.passengerReputationPrecise
* player.roleWeights
* player.setPlayerRole(role [,index])
* player.ship.multiFunctionDisplays
* player.ship.renovationCost
* player.ship.renovationMultiplier
* player.ship.viewPosition*
* ship.AIScript
* ship.AIScriptWakeTime
* ship.autoWeapons
* ship.beaconLabel
* ship.cargoList
* ship.crew
* ship.destinationSystem
* ship.dockingInstructions
* ship.energyRechargeRate
* ship.exhaustEmissiveColor
* ship.exhausts
* ship.extraCargo
* ship.flashers
* ship.homeSystem
* ship.isFleeing
* ship.isMinable
* ship.isTurret
* ship.markedForFines
* ship.shipClassName
* ship.shipUniqueName
* ship.sunGlareFilter
* station.allegiance
* station.market[*].legalPenalty
* sun.name
* system.allDemoShips
* system.populatorSettings
* system.stations
* system.waypoints
* system.wormholes
* visualeffect.beaconLabel
* wormhole.arrivalTime
* wormhole.destination
* wormhole.expiryTime
* wormhole.origin
New methods:
------------
* Ship.keys() (static method)
* Ship.keysForRole(role) (static method)
* Ship.roleIsInCategory(role,category) (static method)
* Ship.roles() (static method)
* Ship.shipDataForKey(key) (static method)
* dock.isQueued(ship)
* player.endScenario(key)
* player.ship.hideHUDSelector(selector)
* player.ship.resetScannerZoom()
* player.ship.setMultiFunctionDisplay(index,key)
* player.ship.setMultiFunctionText(key, string)
* player.ship.showHUDSelector(selector)
* ship.becomeCascadeExplosion()
* ship.broadcastCascadeImminent()
* ship.broadcastDistressMessage()
* ship.checkCourseToDestination()
* ship.checkScanner()
* ship.damageAssessment()
* ship.dumpCargo (change to specify how many items to dump)
* ship.enterWormhole(hole)
* ship.findNearestStation()
* ship.getSafeCourseToDestination()
* ship.markTargetForFines()
* ship.notifyGroupOfWormhole()
* ship.offerToEscort(mother)
* ship.patrolReportIn(station)
* ship.performAttack()
* ship.performCollect()
* ship.performEscort()
* ship.performFaceDestination()
* ship.performFlee()
* ship.performFlyToRangeFromDestination()
* ship.performHold()
* ship.performIdle()
* ship.performIntercept()
* ship.performLandOnPlanet()
* ship.performMining()
* ship.performScriptedAI()
* ship.performScriptedAttackAI()
* ship.performStop()
* ship.performTumble()
* ship.recallDockingInstructions();
* ship.removeDefenseTarget(target)
* ship.requestDockingInstructions();
* ship.requestHelpFromGroup()
* ship.setCargoType(type)
* ship.setCrew(crew)
* ship.throwSpark()
* station.abortAllDockings()
* station.abortDockingForShip(ship)
* station.launchEscort()
* system.locationFromCode(code)
* system.setWaypoint()
New handlers:
-------------
* ship.cargoDumpedNearby(cargo,dumper)
* ship.defenseTargetDestroyed(target)
* ship.escortRejected
* ship.helpRequestReceived(ally,enemy)
* ship.shipAIFrustrated(context)
* ship.shipAchievedDesiredRange
* ship.shipNowFacingDestination()
* ship.shipWasDumped()
* ship.shipWitchspaceBlocked(blocker)
* ship.stationWithdrewDockingClearance
* ship.wormholeSuggested(hole)
* station.stationDockingQueuesAreEmpty
* station.stationReceivedDockingRequest(ship)
* world.guiScreenWillChange fires on changing to GUI_SCREEN_INTERFACES
* world.startUpComplete
* world.systemInformationChanged(gal,sys,key,newValue)
Plists:
-------
New plists:
* manifest.plist: required for OXZ format distribution
* role-categories.plist: supersedes and extends pirate-victim-roles.plist
* scenarios.plist: allows alternative game starts to be added
* shiplibrary.plist: adds ships to the start game ship database
* The demoships.plist file no longer has any effect as there is no
longer a demo ships screen.
New properties:
* equipment.plist: fast_affinity_defensive
* equipment.plist: fast_affinity_offensive
* equipment.plist: sort_order
* hud.plist: alert_conditions
* hud.plist: align
* hud.plist: color_critical
* hud.plist: color_high
* hud.plist: color_low
* hud.plist: color_medium
* hud.plist: color_surround
* hud.plist: drawASCTarget:
* hud.plist: drawPrimedEquipment:
* hud.plist: drawWaypoints:
* hud.plist: drawWitchspaceDestination:
* hud.plist: multi_function_displays
* hud.plist: reticle_scale (scanner targeting enhancement)
* hud.plist: scanner_non_linear
* hud.plist: scanner_ultra_zoom
* planetinfo.plist: nebula_color_1
* planetinfo.plist: nebula_color_2
* planetinfo.plist: planet_name
* planetinfo.plist: populator
* planetinfo.plist: repopulator
* planetinfo.plist: sun_name
* shipdata.plist: auto_weapons
* shipdata.plist: escort_roles
* shipdata.plist: exhaust_emissive_color
* shipdata.plist: sun_glare_filter
* shipyard.plist: renovation_multiplier
* shipyard.plist: ship_name
* shipyard.plist: ship_class_name
Shaders:
--------
* tradeInFactor uniform for player ship
* Simplified shader mode no longer exists
Bug fixes:
==========
* Stop previously unknown targets appearing in the target memory
* Reduce need for JS garbage collection while in flight
* Fix some bugs with combat flight causing misses on really easy shots
* Several Javascript crashes fixed
* Errors in NPC escape pod use for lighter ships fixed
* Fix bug with station subentity initialisation
* Fix bug in ship.forwardWeapon property
* Consistently use ship scanner ranges
* Asp can now equip a fuel scoop
* Core ships with only one missile pylon can no longer buy the
Multi-Targeting System as it's only useful to ships with at least
two missiles.
* Fix some bugs with the escape pod launch sequence
* Fix bug with reticle target sensitivity
* Fix some bugs with compass dial requirements
* Fix bug when pressing opposite movement direction keys together
* Fix various random number generation bugs
* Clean up momentum transfer in explosions
* Fix error in manifest screen paging
* Fix problem with duplicate passenger names in contract generation
* Fix some issues moving in and out of strict mode
System requirements:
====================
General
-------
* Use of the "extra detail" graphics setting is likely to require a
dedicated graphics card for best performance.
Mac-specific
------------
* Oolite now requires Mac OS X 10.6 or later, and is 64-bit only.
-------------------------------------------------------------------------------
Changes between Oolite 1.77.1 and Oolite 1.78:
* Bug with behaviour of ship.forwardWeapon when ship had no forward

View File

@ -3,11 +3,10 @@ Modifications to external libraries' source code for running Oolite
The various ports of Oolite are using a number of external libraries for graphics, sound, input and event handling. Throughout development, certain changes to the source code of these libraries have been deemed necessary, either to enable Oolite to run in a more efficient and independent manner, or simply to fix issues that occurred as a result of these external libraries themselves. Of these libraries, the ones that have to be rebuilt specifically for Oolite, together with the main reasons/areas changed for this reason are:
1. gnustep-base v1.20.1 (Windows) - bug in NSInteger definition, change to dictionary format of NSUserDefaults, fix for integer truncation of integers to 32-bit when parsing XML plists (bug #32495 on the gnustep.org bugtracker) and changes to facilitate native Obj-C exceptions support.
1. gnustep-base v1.20.1 (Windows) - bug in NSInteger definition, change to dictionary format of NSUserDefaults, fix for integer truncation of integers to 32-bit when parsing XML plists (bug #32495 on the gnustep.org bugtracker) and changes to facilitate native Obj-C exceptions support. Also, fix bug in the stack grabbing code at NSDebug.m so that correct stack traces can be obtained also on Windows XP and later.
2. SDL v1.2.13 - (Windows) window resizing issues, backported fix for setting gamma crash.
3. SpiderMonkey v1.85 (all platforms) - certain JS macro definitions required by Oolite not guaranteed or non-existent in standard library.
4. eSpeak v1.43.03 (Windows) - Special build of the Windows speech synthesis libespeak.dll to enable asynchronous playback. Also, defaults the eSpeak data directory to Resources/espeak-data.
5. SDL_mixer v1.2.7 (Windows) - Bug fix for static heard over OGG music when music loops.
The changes made in the source code of each of these libraries are as follows:
@ -43,6 +42,40 @@ result = [[NSNumber alloc] initWithLong: atol(buf)];
to
result = [[NSNumber alloc] initWithLongLong: atoll(buf)];
- The stack backtrace grabbing code in NSDebug.m works for Linux but fails on Windows. The GSPrivateStackAddresses function has been modified to use the WinAPI CaptureStackBacktrace method, so that it returns a correct stack backtrace also on Windows (64-bit only, 32-bit version not modified because we want to keep backwards compatibility as much as possible). The modified function is as follows:
NSMutableArray * GSPrivateStackAddresses(void)
{
NSMutableArray *stack;
NSAutoreleasePool *pool;
#if HAVE_BACKTRACE
void *addresses[1024];
int n = backtrace(addresses, 1024);
int i;
stack = [NSMutableArray arrayWithCapacity: n];
pool = [NSAutoreleasePool new];
for (i = 0; i < n; i++)
{
[stack addObject: [NSValue valueWithPointer: addresses[i]]];
}
#else // Windows code here
unsigned i;
const int kMaxCallers = 62;
void* callers[kMaxCallers];
unsigned n = CaptureStackBackTrace(0, kMaxCallers, callers, NULL);
stack = [NSMutableArray arrayWithCapacity: n];
pool = [NSAutoreleasePool new];
for (i = 0; i < n; i++)
{
[stack addObject: [NSValue valueWithPointer: callers[i]]];
}
#endif // HAVE_BACKTRACE
RELEASE(pool);
return stack;
}
- The GNUstep objc-1.dll runtime has been rebuilt with native Obj-C exception support. To do this on Windows, the patch which provides the void (*_objc_unexpected_exception) (id exception) callback hook to the runtime is required for versions of gcc older than 4.4.0. The patch can be downloaded from http://gcc.gnu.org/bugzilla/attachment.cgi?id=17365. Also, the gcc source header unwind-pe.h must be visible to exception.c in order for the build of libobjc to succeed.
The full source code of GNUstep 1.20.1 is available from
@ -102,8 +135,5 @@ The entire source code of the library can be downloaded from ftp://anonymous@ftp
5. SDL_mixer v1.2.7 (Windows)
- music.c: Commented out lines 334 and 335 of music_mixer function.
Certain other Oolite dependencies are built with specific project settings on the Mac platform, without further changes to their source code. These libraries are libpng (uses also a custom pngusr.h header for the Mac version) and libogg/libvorbis. Also, the Mac debug support uses a modified version of RBSplitView, mostly to enable it to build on 64-bit Mac OS X.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5,8 +5,8 @@ installers/autopackage/default.x86.apspec
installers/autopackage/default.x86_64.apspec
src/Cocoa/Info-Oolite.plist
src/Cocoa/oolite-version.xcconfig
Resources/Scripts/*
Resources/InfoPlist.strings (twice. note: UTF-16)
DebugOXP/Debug.oxp/manifest.plist
- Major versions:
Doc/OoliteReadMe.doc
@ -20,6 +20,6 @@ On release:
http://www.oolite.org/download (current version six times, previous version for Windows updater once)
Topic of #oolite
latest news at berlios.de
latest news at http://www.oolite.org/
update changelog link on freshmeat.net project page
Submit A Release, freshmeat

View File

@ -30,6 +30,7 @@ Chris Morris (cim)
Neil (ZygoUgo)
Nic
No Sleep Nigel
Jake Oliver (Pleb)
Vladimir A. Pavlov (pv4)
Dennis Pedersen (Frame)
Erich Ritz (drumz)

View File

@ -50,7 +50,7 @@ else
LIBJS = js_static
ADDITIONAL_INCLUDE_DIRS = -I$(LIBJS_INC_DIR) -Isrc/SDL -Isrc/Core -Isrc/BSDCompat -Isrc/Core/Scripting -Isrc/Core/Materials -Isrc/Core/Entities -Isrc/Core/OXPVerifier -Isrc/Core/Debug -Isrc/Core/Tables -Isrc/Core/MiniZip
ADDITIONAL_OBJC_LIBS = -lGLU -lGL -lX11 -lSDL -lgnustep-base -l$(LIBJS) `nspr-config --libs` -lstdc++ -lopenal -lvorbisfile
ADDITIONAL_OBJC_LIBS = -lGLU -lGL -lX11 -lSDL -lgnustep-base -l$(LIBJS) `nspr-config --libs` -lstdc++ -lopenal -lz -lvorbisfile
ADDITIONAL_CFLAGS = -Wall -DLINUX -DNEED_STRLCPY `sdl-config --cflags` `nspr-config --cflags`
ADDITIONAL_OBJCFLAGS = -Wall -std=gnu99 -DLOADSAVEGUI -DLINUX -DXP_UNIX -Wno-import `sdl-config --cflags` `nspr-config --cflags`
oolite_LIB_DIRS += -L$(LIBJS_LIB_DIR) -L/usr/X11R6/lib/
@ -154,6 +154,7 @@ oolite_C_FILES = \
OOLITE_DEBUG_FILES = \
OODebugMonitor.m \
OODebugStandards.m \
OODebugSupport.m \
OODebugTCPConsoleClient.m \
OOJSConsole.m \
@ -175,6 +176,7 @@ OOLITE_ENTITY_FILES = \
PlayerEntityScriptMethods.m \
PlayerEntitySound.m \
PlayerEntityStickMapper.m \
PlayerEntityStickProfile.m \
ProxyPlayerEntity.m \
OOBreakPatternEntity.m \
ShipEntity.m \
@ -213,6 +215,7 @@ OOLITE_GRAPHICS_MATERIAL_FILES = \
OOMaterial.m \
OONullTexture.m \
OOPlanetTextureGenerator.m \
OOStandaloneAtmosphereGenerator.m \
OOPNGTextureLoader.m \
OOShaderMaterial.m \
OOShaderProgram.m \
@ -238,6 +241,7 @@ OOLITE_GRAPHICS_MISC_FILES = \
OOOpenGL.m \
OOOpenGLStateManager.m \
OOOpenGLExtensionManager.m \
OOOpenGLMatrixManager.m \
OOProbabilisticTextureManager.m \
OOSkyDrawable.m \
OOTextureSprite.m \
@ -258,6 +262,7 @@ OOLITE_OXP_VERIFIER_FILES = \
OOAIStateMachineVerifierStage.m \
OOCheckDemoShipsPListVerifierStage.m \
OOCheckEquipmentPListVerifierStage.m \
OOCheckPListSyntaxVerifierStage.m \
OOCheckRequiresPListVerifierStage.m \
OOCheckShipDataPListVerifierStage.m \
OOFileScannerVerifierStage.m \
@ -272,7 +277,9 @@ OOLITE_RSRC_MGMT_FILES = \
OOCache.m \
OOCacheManager.m \
OOConvertSystemDescriptions.m \
OOOXZManager.m \
OOPListParsing.m \
OOSystemDescriptionManager.m \
ResourceManager.m \
TextureStore.m
@ -324,17 +331,6 @@ OOLITE_SCRIPTING_FILES = \
OOJSFrameCallbacks.m \
OOJSFont.m
#OOLITE_SOUND_FILES = \
# OOBasicSoundReferencePoint.m \
#
# OOSDLConcreteSound.m \
# OOSDLSound.m \
# OOSDLSoundChannel.m \
# OOSDLSoundMixer.m \
# OOSoundSource.m \
# OOSoundSourcePool.m \
# SDLMusic.m
OOLITE_SOUND_FILES = \
OOOpenALController.m \
OOMusicController.m \
@ -395,14 +391,18 @@ OOLITE_MISC_FILES = \
GameController.m \
GameController+SDLFullScreen.m \
OOJoystickManager.m \
OOJoystickProfile.m \
OOSDLJoystickManager.m \
main.m \
MyOpenGLView.m \
OOCharacter.m \
OOCocoa.m \
OOCommodities.m \
OOCommodityMarket.m \
OOEquipmentType.m \
OOMouseInteractionMode.m \
OORoleSet.m \
OOShipLibraryDescriptions.m \
OOShipRegistry.m \
OOSpatialReference.m \
OOTrumble.m \

View File

@ -33,6 +33,7 @@ after-all::
$(CP) $(CP_FLAGS) Resources/InfoPlist.strings $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/AIs $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/Config $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/Scenarios $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/Scripts $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/Shaders $(PROGDIR)/Resources
$(CP) $(CP_FLAGS) Resources/Binary/Images $(PROGDIR)/Resources

@ -1 +1 @@
Subproject commit 6061dd4b058110411d3a183fc9e67a6b1c0469d0
Subproject commit 9718c76f278972a1d81d25f1fb3a73a5d8f08388

View File

@ -206,6 +206,11 @@ ${NSISVERSIONS}:
@echo "!define VER_GITHASH ${VER_GITHASH}" >> $@
@echo "!define VERSION ${VER}" >> $@
@echo "!define BUILDTIME \"${BUILDTIME}\"" >> $@
ifeq ($(GNUSTEP_HOST_CPU),x86_64)
@echo "!define BUILDHOST_IS64BIT 1" >> $@
else
@echo "!define BUILDHOST_IS64BIT 0" >> $@
endif
.PHONY: pkg-win
pkg-win: release ${NSISVERSIONS}

View File

@ -50,6 +50,8 @@
1A047A460DCA0F4F00EE1CD0 /* NSDictionaryOOExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A047A440DCA0F4F00EE1CD0 /* NSDictionaryOOExtensions.m */; };
1A047B7E0DCB3D7500EE1CD0 /* OOProbabilitySet.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A047B7C0DCB3D7500EE1CD0 /* OOProbabilitySet.h */; };
1A047B7F0DCB3D7500EE1CD0 /* OOProbabilitySet.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A047B7D0DCB3D7500EE1CD0 /* OOProbabilitySet.m */; };
1A05AFCD1879C2B800AFA7D1 /* OOOXZManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A05AFCB1879C2B800AFA7D1 /* OOOXZManager.h */; };
1A05AFCE1879C2B800AFA7D1 /* OOOXZManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A05AFCC1879C2B800AFA7D1 /* OOOXZManager.m */; };
1A062C8911B28D8A00727C1D /* NSObjectOOExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A062C8711B28D8A00727C1D /* NSObjectOOExtensions.h */; };
1A062C8A11B28D8A00727C1D /* NSObjectOOExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A062C8811B28D8A00727C1D /* NSObjectOOExtensions.m */; };
1A0729D90EF56D1200B0F925 /* OOConvertSystemDescriptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0729D70EF56D1200B0F925 /* OOConvertSystemDescriptions.h */; };
@ -218,6 +220,12 @@
1A4DF25D12FDC4880027F43D /* OORingEffectEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4DF25A12FDC4420027F43D /* OORingEffectEntity.m */; };
1A4DF35312FDF0410027F43D /* OOParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4DF35112FDF0410027F43D /* OOParticleSystem.h */; };
1A4DF35412FDF0410027F43D /* OOParticleSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4DF35212FDF0410027F43D /* OOParticleSystem.m */; };
1A4F917119CEDD1900E18B65 /* OODebugStandards.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4F917019CEDD1900E18B65 /* OODebugStandards.m */; };
1A4F917819CEDD7900E18B65 /* OOCommodityMarket.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4F917719CEDD7900E18B65 /* OOCommodityMarket.m */; };
1A4F917A19CEDDB200E18B65 /* OOCommodityMarket.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4F917919CEDDB200E18B65 /* OOCommodityMarket.h */; };
1A4F917D19CEDDC600E18B65 /* OOCommodities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4F917B19CEDDC600E18B65 /* OOCommodities.h */; };
1A4F917E19CEDDC600E18B65 /* OOCommodities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4F917C19CEDDC600E18B65 /* OOCommodities.m */; };
1A4F918019CEDDFB00E18B65 /* OODebugStandards.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4F917F19CEDDFB00E18B65 /* OODebugStandards.h */; };
1A4FB3350C8DC86800DC8E1F /* OOJSOolite.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4FB3330C8DC86800DC8E1F /* OOJSOolite.h */; };
1A4FB3360C8DC86800DC8E1F /* OOJSOolite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4FB3340C8DC86800DC8E1F /* OOJSOolite.m */; };
1A504D9114DC964A003E5363 /* Oolite.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1A504D9014DC964A003E5363 /* Oolite.xib */; };
@ -254,6 +262,10 @@
1A62F0FD0E26A2A000897506 /* OOEquipmentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A62F0FB0E26A2A000897506 /* OOEquipmentType.m */; };
1A62F0FE0E26A2A000897506 /* OOEquipmentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A62F0FC0E26A2A000897506 /* OOEquipmentType.h */; };
1A68A4A51615F4A400D7BB08 /* OOMeshToOctreeConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2512834109BA27EC00F43D55 /* OOMeshToOctreeConverter.m */; settings = {COMPILER_FLAGS = $OO_MATHS_OPTS; }; };
1A69FFEE18A64C320062EAC8 /* PlayerEntityStickProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A69FFEC18A64C320062EAC8 /* PlayerEntityStickProfile.h */; };
1A69FFEF18A64C320062EAC8 /* PlayerEntityStickProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A69FFED18A64C320062EAC8 /* PlayerEntityStickProfile.m */; };
1A69FFF718A64CF70062EAC8 /* OOJoystickProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A69FFF518A64CF70062EAC8 /* OOJoystickProfile.h */; };
1A69FFF818A64CF70062EAC8 /* OOJoystickProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A69FFF618A64CF70062EAC8 /* OOJoystickProfile.m */; };
1A6A963310AEEC5D0065D0F3 /* AIGraphViz.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A6A963210AEEC5D0065D0F3 /* AIGraphViz.m */; };
1A6B1EF00C9AA5C6000717CF /* OOScriptTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A6B1EEE0C9AA5C6000717CF /* OOScriptTimer.h */; };
1A6B1EF10C9AA5C6000717CF /* OOScriptTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A6B1EEF0C9AA5C6000717CF /* OOScriptTimer.m */; };
@ -410,6 +422,8 @@
1AB4AEB90D688AD9003076D6 /* OOLogHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB4AEB70D688AD9003076D6 /* OOLogHeader.m */; settings = {COMPILER_FLAGS = $SNAPSHOT_MACROS; }; };
1AB5E1EF12BD628500C334DD /* OOJoystickManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB5E1ED12BD628500C334DD /* OOJoystickManager.h */; };
1AB5E1F012BD628500C334DD /* OOJoystickManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB5E1EE12BD628500C334DD /* OOJoystickManager.m */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
1AB6963C191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB6963A191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.h */; };
1AB6963D191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB6963B191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.m */; };
1AB7761012CA2EE0001478BB /* libjs_for_oolite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AB7760212CA2E53001478BB /* libjs_for_oolite.a */; };
1AB784F90D554F7B00517983 /* OOJSSoundSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB784F70D554F7B00517983 /* OOJSSoundSource.h */; };
1AB784FA0D554F7B00517983 /* OOJSSoundSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB784F80D554F7B00517983 /* OOJSSoundSource.m */; };
@ -455,6 +469,8 @@
1ACEA7AB0C91E32800C7CE97 /* OOJSMission.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACEA7A90C91E32800C7CE97 /* OOJSMission.m */; };
1AD1F4FF0CD9E83700EAE520 /* NSThreadOOExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD1F4C80CD9E42A00EAE520 /* NSThreadOOExtensions.m */; };
1AD1F5000CD9E83800EAE520 /* NSThreadOOExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD1F4C70CD9E42A00EAE520 /* NSThreadOOExtensions.h */; };
1AD2E31618F17BC700239EBB /* OOShipLibraryDescriptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD2E31418F17BC700239EBB /* OOShipLibraryDescriptions.h */; };
1AD2E31718F17BC700239EBB /* OOShipLibraryDescriptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD2E31518F17BC700239EBB /* OOShipLibraryDescriptions.m */; };
1AD3C339163A92F600469C4D /* OOOpenGLStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3C338163A92F600469C4D /* OOOpenGLStateManager.m */; };
1AD8522517947BD600CBE743 /* OOHPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD8522317947BD600CBE743 /* OOHPVector.h */; };
1AD8522617947BD600CBE743 /* OOHPVector.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD8522417947BD600CBE743 /* OOHPVector.m */; };
@ -526,6 +542,12 @@
25F4676509969672009483BF /* MyOpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 25F4676309969672009483BF /* MyOpenGLView.m */; };
2B4CDFEC107B3D8400526C98 /* OOJSManifest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4CDFEA107B3D8400526C98 /* OOJSManifest.h */; };
2B4CDFED107B3D8400526C98 /* OOJSManifest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B4CDFEB107B3D8400526C98 /* OOJSManifest.m */; };
B33A44F1199E6745000B45AE /* OOOpenGLMatrixManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B33A44EF199E6745000B45AE /* OOOpenGLMatrixManager.h */; };
B33A44F2199E6745000B45AE /* OOOpenGLMatrixManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B33A44F0199E6745000B45AE /* OOOpenGLMatrixManager.m */; };
B3B46C871A0D053D00D6C39B /* OOSystemDescriptionManager.h in Copy Plug-ins */ = {isa = PBXBuildFile; fileRef = B3B46C851A0D053D00D6C39B /* OOSystemDescriptionManager.h */; };
B3B46C881A0D053D00D6C39B /* OOSystemDescriptionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B3B46C851A0D053D00D6C39B /* OOSystemDescriptionManager.h */; };
B3B46C891A0D053D00D6C39B /* OOSystemDescriptionManager.m in Copy Plug-ins */ = {isa = PBXBuildFile; fileRef = B3B46C861A0D053D00D6C39B /* OOSystemDescriptionManager.m */; };
B3B46C8A1A0D053D00D6C39B /* OOSystemDescriptionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B3B46C861A0D053D00D6C39B /* OOSystemDescriptionManager.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -678,6 +700,8 @@
dstPath = Oolite.app/Contents/PlugIns;
dstSubfolderSpec = 16;
files = (
B3B46C871A0D053D00D6C39B /* OOSystemDescriptionManager.h in Copy Plug-ins */,
B3B46C891A0D053D00D6C39B /* OOSystemDescriptionManager.m in Copy Plug-ins */,
1ABF219B12D691B300075821 /* Oolite.docktileplugin in Copy Plug-ins */,
);
name = "Copy Plug-ins";
@ -751,9 +775,10 @@
1A047B7C0DCB3D7500EE1CD0 /* OOProbabilitySet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOProbabilitySet.h; sourceTree = "<group>"; };
1A047B7D0DCB3D7500EE1CD0 /* OOProbabilitySet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOProbabilitySet.m; sourceTree = "<group>"; };
1A0519340C7CCAC900BA5CCA /* DebugBundle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = DebugBundle.xcodeproj; path = "Mac-specific/DebugBundle/DebugBundle.xcodeproj"; sourceTree = "<group>"; };
1A05AFCB1879C2B800AFA7D1 /* OOOXZManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOOXZManager.h; sourceTree = "<group>"; };
1A05AFCC1879C2B800AFA7D1 /* OOOXZManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOOXZManager.m; sourceTree = "<group>"; };
1A062C8711B28D8A00727C1D /* NSObjectOOExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSObjectOOExtensions.h; sourceTree = "<group>"; };
1A062C8811B28D8A00727C1D /* NSObjectOOExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectOOExtensions.m; sourceTree = "<group>"; };
1A06F2851196E5B100AFA5B4 /* OOCASoundDebugMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundDebugMonitor.h; sourceTree = "<group>"; };
1A06F3141196FB6F00AFA5B4 /* oolite-player-AI.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = "oolite-player-AI.plist"; sourceTree = "<group>"; };
1A0729D70EF56D1200B0F925 /* OOConvertSystemDescriptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOConvertSystemDescriptions.h; sourceTree = "<group>"; };
1A0729D80EF56D1200B0F925 /* OOConvertSystemDescriptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOConvertSystemDescriptions.m; sourceTree = "<group>"; };
@ -807,13 +832,11 @@
1A23154F0B9C778400EF0852 /* splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = splash.png; sourceTree = "<group>"; };
1A2315510B9C778400EF0852 /* trumblebox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trumblebox.png; sourceTree = "<group>"; };
1A2316DE0B9CFAD700EF0852 /* characters.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = characters.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316DF0B9CFAD700EF0852 /* commodities.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; languageSpecificationIdentifier = plist; path = commodities.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E00B9CFAD700EF0852 /* customsounds.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = customsounds.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E10B9CFAD700EF0852 /* demoships.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = demoships.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E30B9CFAD700EF0852 /* equipment.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = equipment.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E40B9CFAD700EF0852 /* hud-small.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = "hud-small.plist"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E50B9CFAD700EF0852 /* hud.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = hud.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E60B9CFAD700EF0852 /* illegal_goods.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = illegal_goods.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E70B9CFAD700EF0852 /* keyconfig.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; languageSpecificationIdentifier = plist; path = keyconfig.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E80B9CFAD700EF0852 /* logcontrol.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = logcontrol.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1A2316E90B9CFAD700EF0852 /* missiontext.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = missiontext.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
@ -1126,6 +1149,13 @@
1A4DF25A12FDC4420027F43D /* OORingEffectEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OORingEffectEntity.m; sourceTree = "<group>"; };
1A4DF35112FDF0410027F43D /* OOParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOParticleSystem.h; sourceTree = "<group>"; };
1A4DF35212FDF0410027F43D /* OOParticleSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOParticleSystem.m; sourceTree = "<group>"; };
1A4F917019CEDD1900E18B65 /* OODebugStandards.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OODebugStandards.m; sourceTree = "<group>"; };
1A4F917719CEDD7900E18B65 /* OOCommodityMarket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCommodityMarket.m; sourceTree = "<group>"; };
1A4F917919CEDDB200E18B65 /* OOCommodityMarket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCommodityMarket.h; sourceTree = "<group>"; };
1A4F917B19CEDDC600E18B65 /* OOCommodities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCommodities.h; sourceTree = "<group>"; };
1A4F917C19CEDDC600E18B65 /* OOCommodities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCommodities.m; sourceTree = "<group>"; };
1A4F917F19CEDDFB00E18B65 /* OODebugStandards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OODebugStandards.h; sourceTree = "<group>"; };
1A4F918319CEDE5300E18B65 /* trade-goods.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "trade-goods.plist"; sourceTree = "<group>"; };
1A4FB3330C8DC86800DC8E1F /* OOJSOolite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJSOolite.h; sourceTree = "<group>"; };
1A4FB3340C8DC86800DC8E1F /* OOJSOolite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOJSOolite.m; sourceTree = "<group>"; };
1A504D9014DC964A003E5363 /* Oolite.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = Oolite.xib; path = src/Cocoa/Oolite.xib; sourceTree = SOURCE_ROOT; };
@ -1179,6 +1209,10 @@
1A644E211052A9FD00833636 /* traderInterceptAI.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = traderInterceptAI.plist; sourceTree = "<group>"; };
1A65150D0CCC9E220054D01B /* oolite-standard-vertex.vertex */ = {isa = PBXFileReference; explicitFileType = sourcecode.glsl; fileEncoding = 4; path = "oolite-standard-vertex.vertex"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.glsl; };
1A65150E0CCC9E220054D01B /* oolite-default-shader.fragment */ = {isa = PBXFileReference; explicitFileType = sourcecode.glsl; fileEncoding = 4; path = "oolite-default-shader.fragment"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.glsl; };
1A69FFEC18A64C320062EAC8 /* PlayerEntityStickProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayerEntityStickProfile.h; sourceTree = "<group>"; };
1A69FFED18A64C320062EAC8 /* PlayerEntityStickProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayerEntityStickProfile.m; sourceTree = "<group>"; };
1A69FFF518A64CF70062EAC8 /* OOJoystickProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJoystickProfile.h; sourceTree = "<group>"; };
1A69FFF618A64CF70062EAC8 /* OOJoystickProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOJoystickProfile.m; sourceTree = "<group>"; };
1A6A3A7E1135E0F200697AF8 /* oolite-snapshot.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "oolite-snapshot.xcconfig"; path = "src/Cocoa/oolite-snapshot.xcconfig"; sourceTree = "<group>"; };
1A6A963210AEEC5D0065D0F3 /* AIGraphViz.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIGraphViz.m; sourceTree = "<group>"; };
1A6B1EEE0C9AA5C6000717CF /* OOScriptTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOScriptTimer.h; sourceTree = "<group>"; };
@ -1272,8 +1306,6 @@
1A817DBE106D441200AA2F97 /* oolite-particle-flash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "oolite-particle-flash.png"; sourceTree = "<group>"; };
1A817DC1106D443B00AA2F97 /* OOFlashEffectEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOFlashEffectEntity.h; sourceTree = "<group>"; };
1A817DC2106D443B00AA2F97 /* OOFlashEffectEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOFlashEffectEntity.m; sourceTree = "<group>"; };
1A81F7070A7BAC4D006580AD /* OOCAMusic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCAMusic.m; sourceTree = "<group>"; };
1A81F7080A7BAC4D006580AD /* OOCAMusic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCAMusic.h; sourceTree = "<group>"; };
1A846BA90D79F9570081280D /* oolite-version.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "oolite-version.xcconfig"; path = "src/Cocoa/oolite-version.xcconfig"; sourceTree = "<group>"; };
1A85AD0612EDCAC7000E1FCD /* OOJSPropID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJSPropID.h; sourceTree = "<group>"; };
1A85AE4D12EE0ED9000E1FCD /* OOViewID.tbl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OOViewID.tbl; sourceTree = "<group>"; };
@ -1498,6 +1530,8 @@
1AB4AEB70D688AD9003076D6 /* OOLogHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOLogHeader.m; sourceTree = "<group>"; };
1AB5E1ED12BD628500C334DD /* OOJoystickManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJoystickManager.h; sourceTree = "<group>"; };
1AB5E1EE12BD628500C334DD /* OOJoystickManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOJoystickManager.m; sourceTree = "<group>"; };
1AB6963A191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOStandaloneAtmosphereGenerator.h; sourceTree = "<group>"; };
1AB6963B191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOStandaloneAtmosphereGenerator.m; sourceTree = "<group>"; };
1AB775FC12CA2E53001478BB /* libjs.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libjs.xcodeproj; path = "deps/Cocoa-deps/libjs/libjs.xcodeproj"; sourceTree = "<group>"; };
1AB784F70D554F7B00517983 /* OOJSSoundSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJSSoundSource.h; sourceTree = "<group>"; };
1AB784F80D554F7B00517983 /* OOJSSoundSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOJSSoundSource.m; sourceTree = "<group>"; };
@ -1556,8 +1590,9 @@
1AD0C32F0C463FCB0070BD23 /* autoAImap.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; languageSpecificationIdentifier = plist; path = autoAImap.plist; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
1AD1F4C70CD9E42A00EAE520 /* NSThreadOOExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSThreadOOExtensions.h; sourceTree = "<group>"; };
1AD1F4C80CD9E42A00EAE520 /* NSThreadOOExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSThreadOOExtensions.m; sourceTree = "<group>"; };
1AD2E31418F17BC700239EBB /* OOShipLibraryDescriptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOShipLibraryDescriptions.h; sourceTree = "<group>"; };
1AD2E31518F17BC700239EBB /* OOShipLibraryDescriptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOShipLibraryDescriptions.m; sourceTree = "<group>"; };
1AD3C338163A92F600469C4D /* OOOpenGLStateManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOOpenGLStateManager.m; sourceTree = "<group>"; };
1AD5A81A12D3A9FD00B62503 /* exports-debug-32.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; name = "exports-debug-32.exp"; path = "src/Cocoa/exports-debug-32.exp"; sourceTree = "<group>"; };
1AD5A81B12D3A9FD00B62503 /* exports-debug-64.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; name = "exports-debug-64.exp"; path = "src/Cocoa/exports-debug-64.exp"; sourceTree = "<group>"; };
1AD8522317947BD600CBE743 /* OOHPVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOHPVector.h; sourceTree = "<group>"; };
1AD8522417947BD600CBE743 /* OOHPVector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOHPVector.m; sourceTree = "<group>"; };
@ -1603,25 +1638,6 @@
2512834409BA281500F43D55 /* CollisionRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollisionRegion.h; sourceTree = "<group>"; };
2512834509BA281500F43D55 /* CollisionRegion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollisionRegion.m; sourceTree = "<group>"; };
25160E2E0995362F0037C2E1 /* OOCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCocoa.h; sourceTree = "<group>"; };
251610CA099544090037C2E1 /* OOCABufferedSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCABufferedSound.h; sourceTree = "<group>"; };
251610CB099544090037C2E1 /* OOCASoundMixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundMixer.h; sourceTree = "<group>"; };
251610CD099544090037C2E1 /* OOCASoundChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundChannel.h; sourceTree = "<group>"; };
251610CF099544090037C2E1 /* OOCASoundReferencePoint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCASoundReferencePoint.m; sourceTree = "<group>"; };
251610D0099544090037C2E1 /* OOCASound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASound.h; sourceTree = "<group>"; };
251610D1099544090037C2E1 /* OOCASoundMixer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCASoundMixer.m; sourceTree = "<group>"; };
251610D2099544090037C2E1 /* OOCABufferedSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCABufferedSound.m; sourceTree = "<group>"; };
251610D3099544090037C2E1 /* OOCAStreamingSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCAStreamingSound.m; sourceTree = "<group>"; };
251610D4099544090037C2E1 /* OOCASoundDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundDecoder.h; sourceTree = "<group>"; };
251610D5099544090037C2E1 /* OOCASound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCASound.m; sourceTree = "<group>"; };
251610D6099544090037C2E1 /* OOCASoundChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCASoundChannel.m; sourceTree = "<group>"; };
251610D7099544090037C2E1 /* OOCAStreamingSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCAStreamingSound.h; sourceTree = "<group>"; };
251610D8099544090037C2E1 /* OOErrorDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOErrorDescription.h; sourceTree = "<group>"; };
251610D9099544090037C2E1 /* OOCASoundReferencePoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundReferencePoint.h; sourceTree = "<group>"; };
251610DA099544090037C2E1 /* OOCASoundInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOCASoundInternal.h; sourceTree = "<group>"; };
251610DB099544090037C2E1 /* OOCASoundDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOCASoundDecoder.m; sourceTree = "<group>"; };
251610DC099544090037C2E1 /* OOErrorDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOErrorDescription.m; sourceTree = "<group>"; };
251610F0099544190037C2E1 /* VirtualRingBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VirtualRingBuffer.m; sourceTree = "<group>"; };
251610F1099544190037C2E1 /* VirtualRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VirtualRingBuffer.h; sourceTree = "<group>"; };
25161101099544380037C2E1 /* AI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AI.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
25161102099544380037C2E1 /* OOXMLExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOXMLExtensions.m; sourceTree = "<group>"; };
25161106099544390037C2E1 /* AI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = AI.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
@ -1666,11 +1682,15 @@
2B4CDFEA107B3D8400526C98 /* OOJSManifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOJSManifest.h; sourceTree = "<group>"; };
2B4CDFEB107B3D8400526C98 /* OOJSManifest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOJSManifest.m; sourceTree = "<group>"; };
2B9A1088105D526200EE2AE6 /* javascript-errors.plist */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = "javascript-errors.plist"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
B33A44EF199E6745000B45AE /* OOOpenGLMatrixManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOOpenGLMatrixManager.h; sourceTree = "<group>"; };
B33A44F0199E6745000B45AE /* OOOpenGLMatrixManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOOpenGLMatrixManager.m; sourceTree = "<group>"; };
B3460D4315285BDE002592D0 /* oolite-default-planet.fragment */ = {isa = PBXFileReference; explicitFileType = sourcecode.glsl; fileEncoding = 4; path = "oolite-default-planet.fragment"; sourceTree = "<group>"; };
B3460D4415285BDE002592D0 /* oolite-default-planet.vertex */ = {isa = PBXFileReference; explicitFileType = sourcecode.glsl; fileEncoding = 4; path = "oolite-default-planet.vertex"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.glsl; };
B3A963FD165D7FB5001BB5C1 /* oolite-laser-blur.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "oolite-laser-blur.png"; sourceTree = "<group>"; };
B3A963FE165D7FB5001BB5C1 /* oolite-laser-blur2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "oolite-laser-blur2.png"; sourceTree = "<group>"; };
B3A96403165EE124001BB5C1 /* oolite-exhaust-blur.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "oolite-exhaust-blur.png"; sourceTree = "<group>"; };
B3B46C851A0D053D00D6C39B /* OOSystemDescriptionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOSystemDescriptionManager.h; sourceTree = "<group>"; };
B3B46C861A0D053D00D6C39B /* OOSystemDescriptionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOSystemDescriptionManager.m; sourceTree = "<group>"; };
B3EC10B6155C154000778240 /* OOLegalStatusReason.tbl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OOLegalStatusReason.tbl; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -1748,7 +1768,7 @@
1A1BB8A01767DD3500050283 /* Products */ = {
isa = PBXGroup;
children = (
1A1BB8A41767DD3500050283 /* OoliteUnitTests.octest */,
1A1BB8A41767DD3500050283 /* OoliteUnitTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@ -1801,7 +1821,6 @@
1ABC04260EF872B7003B740A /* crosshairs.plist */,
1AD0C32F0C463FCB0070BD23 /* autoAImap.plist */,
1A2316DE0B9CFAD700EF0852 /* characters.plist */,
1A2316DF0B9CFAD700EF0852 /* commodities.plist */,
1A2316E00B9CFAD700EF0852 /* customsounds.plist */,
1A2316E10B9CFAD700EF0852 /* demoships.plist */,
1A4501E10DBF699A00815C04 /* descriptions.plist */,
@ -1809,7 +1828,6 @@
1AEB48D1119D51BD007BD514 /* gpu-settings.plist */,
1A2316E40B9CFAD700EF0852 /* hud-small.plist */,
1A2316E50B9CFAD700EF0852 /* hud.plist */,
1A2316E60B9CFAD700EF0852 /* illegal_goods.plist */,
1A2316E70B9CFAD700EF0852 /* keyconfig.plist */,
1A2316E80B9CFAD700EF0852 /* logcontrol.plist */,
1A9533890C02089E004EBB58 /* material-defaults.plist */,
@ -1825,6 +1843,7 @@
1A2316EC0B9CFAD700EF0852 /* shipyard.plist */,
1A2316ED0B9CFAD700EF0852 /* speech_pronunciation_guide.plist */,
1A3591820C1C382700E52220 /* startextures.plist */,
1A4F918319CEDE5300E18B65 /* trade-goods.plist */,
1A3491290BC25EAA00802DA7 /* world-scripts.plist */,
1AAF56590F1A27D900A2F2E6 /* whitelist.plist */,
);
@ -2006,6 +2025,8 @@
1A26D0A50BCF9CF70073F257 /* PlayerEntitySound.m */,
1A26D09F0BCF9CF70073F257 /* PlayerEntityStickMapper.h */,
1A26D09E0BCF9CF70073F257 /* PlayerEntityStickMapper.m */,
1A69FFEC18A64C320062EAC8 /* PlayerEntityStickProfile.h */,
1A69FFED18A64C320062EAC8 /* PlayerEntityStickProfile.m */,
);
name = PlayerEntity;
sourceTree = "<group>";
@ -2057,6 +2078,8 @@
1A2A1DEA0BD2A28E00152975 /* OOMacroOpenGL.h */,
1A43234A0BCFC9BB00F65914 /* OOOpenGLExtensionManager.h */,
1A43234B0BCFC9BB00F65914 /* OOOpenGLExtensionManager.m */,
B33A44EF199E6745000B45AE /* OOOpenGLMatrixManager.h */,
B33A44F0199E6745000B45AE /* OOOpenGLMatrixManager.m */,
1A127F4112EC6A4400B65D9F /* OOTextureSprite.h */,
1A127F4212EC6A4400B65D9F /* OOTextureSprite.m */,
1AB9AE89107F459B00B6F3CE /* OOPolygonSprite.h */,
@ -2080,9 +2103,11 @@
1A2DA2A00CB4CB3500DE6823 /* Debug */ = {
isa = PBXGroup;
children = (
1A2DA3ED0CB4E84900DE6823 /* OODebugSupport.h */,
1A87063D1172029F003FDD2A /* OODebugFlags.h */,
1A2DA3ED0CB4E84900DE6823 /* OODebugSupport.h */,
1A2DA3EC0CB4E84900DE6823 /* OODebugSupport.m */,
1A4F917F19CEDDFB00E18B65 /* OODebugStandards.h */,
1A4F917019CEDD1900E18B65 /* OODebugStandards.m */,
1A2DA3540CB4D10800DE6823 /* OODebuggerInterface.h */,
1A2DA34A0CB4D0D800DE6823 /* OODebugMonitor.h */,
1A2DA34C0CB4D0D800DE6823 /* OODebugMonitor.m */,
@ -2349,6 +2374,8 @@
1AECE9EE11779910003986A8 /* OOPixMap.m */,
1A19783C117F81B10060DB56 /* OOPixMapChannelOperations.h */,
1A19783D117F81B10060DB56 /* OOPixMapChannelOperations.m */,
1AB6963A191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.h */,
1AB6963B191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.m */,
1AB01ABC0BB15AED00F1B949 /* OOTextureScaling.h */,
1AB01ABD0BB15AED00F1B949 /* OOTextureScaling.m */,
1A95C03E118A450E002EE302 /* OOConvertCubeMapToLatLong.h */,
@ -2389,7 +2416,6 @@
1ACBF0700D82DF9B00CC005F /* OOSoundSourcePool.m */,
1A7B967E0E620C9E00322821 /* OOSoundInternal.h */,
1AA085E81825788E007CCAEB /* OpenAL */,
1A8A3D8F0B9B058500AB7625 /* CoreAudio */,
);
name = Audio;
sourceTree = "<group>";
@ -2778,6 +2804,8 @@
1AD1F4C80CD9E42A00EAE520 /* NSThreadOOExtensions.m */,
1A1D212D0D2BD4C100F4DEC2 /* bsd_string.h */,
1AAB9A960D779F3C00A9F424 /* OOCocoa.m */,
B3B46C851A0D053D00D6C39B /* OOSystemDescriptionManager.h */,
B3B46C861A0D053D00D6C39B /* OOSystemDescriptionManager.m */,
1A1616600D7DCFDC0094AE5B /* OOFilteringEnumerator.h */,
1A1616610D7DCFDC0094AE5B /* OOFilteringEnumerator.m */,
1A047B7C0DCB3D7500EE1CD0 /* OOProbabilitySet.h */,
@ -2879,6 +2907,8 @@
1A0729FD0EF5796500B0F925 /* OldSchoolPropertyListWriting.m */,
1A0729D70EF56D1200B0F925 /* OOConvertSystemDescriptions.h */,
1A0729D80EF56D1200B0F925 /* OOConvertSystemDescriptions.m */,
1A05AFCB1879C2B800AFA7D1 /* OOOXZManager.h */,
1A05AFCC1879C2B800AFA7D1 /* OOOXZManager.m */,
);
name = "Resource Management";
sourceTree = "<group>";
@ -2894,6 +2924,8 @@
1AC545050D4D228400C90E5B /* OOEncodingConverter.m */,
1AB5E1ED12BD628500C334DD /* OOJoystickManager.h */,
1AB5E1EE12BD628500C334DD /* OOJoystickManager.m */,
1A69FFF518A64CF70062EAC8 /* OOJoystickProfile.h */,
1A69FFF618A64CF70062EAC8 /* OOJoystickProfile.m */,
);
name = "User Interface";
sourceTree = "<group>";
@ -2928,36 +2960,6 @@
name = Mathematics;
sourceTree = "<group>";
};
1A8A3D8F0B9B058500AB7625 /* CoreAudio */ = {
isa = PBXGroup;
children = (
251610D0099544090037C2E1 /* OOCASound.h */,
251610DA099544090037C2E1 /* OOCASoundInternal.h */,
251610D5099544090037C2E1 /* OOCASound.m */,
1A81F7080A7BAC4D006580AD /* OOCAMusic.h */,
1A81F7070A7BAC4D006580AD /* OOCAMusic.m */,
251610CA099544090037C2E1 /* OOCABufferedSound.h */,
251610D2099544090037C2E1 /* OOCABufferedSound.m */,
251610D7099544090037C2E1 /* OOCAStreamingSound.h */,
251610D3099544090037C2E1 /* OOCAStreamingSound.m */,
251610CB099544090037C2E1 /* OOCASoundMixer.h */,
251610D1099544090037C2E1 /* OOCASoundMixer.m */,
251610CD099544090037C2E1 /* OOCASoundChannel.h */,
251610D6099544090037C2E1 /* OOCASoundChannel.m */,
251610D9099544090037C2E1 /* OOCASoundReferencePoint.h */,
251610CF099544090037C2E1 /* OOCASoundReferencePoint.m */,
251610D4099544090037C2E1 /* OOCASoundDecoder.h */,
251610DB099544090037C2E1 /* OOCASoundDecoder.m */,
251610D8099544090037C2E1 /* OOErrorDescription.h */,
251610DC099544090037C2E1 /* OOErrorDescription.m */,
251610F1099544190037C2E1 /* VirtualRingBuffer.h */,
251610F0099544190037C2E1 /* VirtualRingBuffer.m */,
1A06F2851196E5B100AFA5B4 /* OOCASoundDebugMonitor.h */,
);
name = CoreAudio;
path = ../Cocoa;
sourceTree = "<group>";
};
1AA085E81825788E007CCAEB /* OpenAL */ = {
isa = PBXGroup;
children = (
@ -2992,7 +2994,6 @@
1A45BCC9104AB46900A89324 /* oolite-targets.xcconfig */,
1A846BA90D79F9570081280D /* oolite-version.xcconfig */,
1A0730E817888C44008A1829 /* oolite-warnings.xcconfig */,
1AD5A81A12D3A9FD00B62503 /* exports-debug-32.exp */,
1AD5A81B12D3A9FD00B62503 /* exports-debug-64.exp */,
1A1B24C313293ED2007A0940 /* exports-release.exp */,
);
@ -3064,6 +3065,10 @@
1A3A04610BC547DC00B5E2D9 /* OOTypes.h */,
25161144099544390037C2E1 /* Universe.h */,
25161143099544390037C2E1 /* Universe.m */,
1A4F917B19CEDDC600E18B65 /* OOCommodities.h */,
1A4F917C19CEDDC600E18B65 /* OOCommodities.m */,
1A4F917919CEDDB200E18B65 /* OOCommodityMarket.h */,
1A4F917719CEDD7900E18B65 /* OOCommodityMarket.m */,
25161116099544390037C2E1 /* OOSound.h */,
25161110099544390037C2E1 /* OOTrumble.h */,
25161108099544390037C2E1 /* OOTrumble.m */,
@ -3080,6 +3085,8 @@
1ACEA3480C91507000C7CE97 /* OORoleSet.m */,
1A0479E70DC9F81000EE1CD0 /* OOShipRegistry.h */,
1A0479E80DC9F81000EE1CD0 /* OOShipRegistry.m */,
1AD2E31418F17BC700239EBB /* OOShipLibraryDescriptions.h */,
1AD2E31518F17BC700239EBB /* OOShipLibraryDescriptions.m */,
1A62F0FC0E26A2A000897506 /* OOEquipmentType.h */,
1A62F0FB0E26A2A000897506 /* OOEquipmentType.m */,
1A7038A112BB9F5A0015CCDC /* dummy.cpp */,
@ -3171,6 +3178,7 @@
25F3E63B0994F08A002F25FD /* OOOpenGL.h in Headers */,
25160E2F0995362F0037C2E1 /* OOCocoa.h in Headers */,
1AA08611182578B8007CCAEB /* OOOpenAL.h in Headers */,
1AB6963C191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.h in Headers */,
25161158099544390037C2E1 /* AI.h in Headers */,
2516115D099544390037C2E1 /* GameController.h in Headers */,
25161162099544390037C2E1 /* OOTrumble.h in Headers */,
@ -3230,6 +3238,7 @@
1A26D0BC0BCF9CF80073F257 /* PlayerEntityContracts.h in Headers */,
1A26D0BE0BCF9CF80073F257 /* PlanetEntity.h in Headers */,
1A26D0C10BCF9CF80073F257 /* Entity.h in Headers */,
1AD2E31618F17BC700239EBB /* OOShipLibraryDescriptions.h in Headers */,
1A26D0C50BCF9CF80073F257 /* WormholeEntity.h in Headers */,
1A92AB711846403200C507E3 /* OOJSExhaustPlume.h in Headers */,
1A26D0C70BCF9CF80073F257 /* StationEntity.h in Headers */,
@ -3289,6 +3298,7 @@
1A6B228D0C9B40D4000717CF /* OOJSTimer.h in Headers */,
1A6B25EE0C9C2746000717CF /* OOJSClock.h in Headers */,
1A2DA2AB0CB4CB5C00DE6823 /* OODebugTCPConsoleProtocol.h in Headers */,
B3B46C881A0D053D00D6C39B /* OOSystemDescriptionManager.h in Headers */,
1A2DA2AE0CB4CB5C00DE6823 /* OODebugTCPConsoleClient.h in Headers */,
1A2DA2AF0CB4CB5C00DE6823 /* OOTCPStreamDecoderAbstractionLayer.h in Headers */,
1A2DA2B00CB4CB5C00DE6823 /* OOTCPStreamDecoder.h in Headers */,
@ -3311,6 +3321,7 @@
1A0DA2EE0D71D280009B0970 /* OOJSSpecialFunctions.h in Headers */,
1A5218DA0D72EC21000865E9 /* OOSpatialReference.h in Headers */,
1A03658A0D7CA05000B5F46F /* OOSkyDrawable.h in Headers */,
B33A44F1199E6745000B45AE /* OOOpenGLMatrixManager.h in Headers */,
1A1616620D7DCFDC0094AE5B /* OOFilteringEnumerator.h in Headers */,
1ACBF0AD0D82F79600CC005F /* OOSoundSourcePool.h in Headers */,
1A7BA8830D843485003C6CA3 /* ShipEntityScriptMethods.h in Headers */,
@ -3345,6 +3356,7 @@
1A3BA259106555D100C5C6F3 /* NSNumberOOExtensions.h in Headers */,
1A00C65510663D3700A8737D /* OOProfilingStopwatch.h in Headers */,
1A00C7BA10667D3100A8737D /* OOECMBlastEntity.h in Headers */,
1A4F917A19CEDDB200E18B65 /* OOCommodityMarket.h in Headers */,
1A00C7DF1066814C00A8737D /* OOAsyncWorkManager.h in Headers */,
1A817CFC106D232100AA2F97 /* OOPlasmaShotEntity.h in Headers */,
1A817DA0106D3FF000AA2F97 /* OOPlasmaBurstEntity.h in Headers */,
@ -3355,11 +3367,13 @@
1AA7FCB010C2BA3B0058FBED /* OOPlanetData.h in Headers */,
1AA7FD1E10C2C3750058FBED /* OOPlanetEntity.h in Headers */,
1AA7FDDC10C2DC800058FBED /* OOSunEntity.h in Headers */,
1A4F917D19CEDDC600E18B65 /* OOCommodities.h in Headers */,
1AA7FE2D10C2F2070058FBED /* OOTextureGenerator.h in Headers */,
1AA7FE3410C2F26A0058FBED /* OOPlanetTextureGenerator.h in Headers */,
1ADA564810CD68D800E891B8 /* OOStellarBody.h in Headers */,
1A01574311034A86008EE36A /* ShipEntityLoadRestore.h in Headers */,
1A7E3189113ED496009AAB6D /* ProxyPlayerEntity.h in Headers */,
1A05AFCD1879C2B800AFA7D1 /* OOOXZManager.h in Headers */,
1A87063E1172029F003FDD2A /* OODebugFlags.h in Headers */,
1A3D03151173536C005BF5E6 /* OOMultiTextureMaterial.h in Headers */,
1A3D034A11736EDA005BF5E6 /* OOMaterialConvenienceCreators.h in Headers */,
@ -3374,7 +3388,9 @@
1A062C8911B28D8A00727C1D /* NSObjectOOExtensions.h in Headers */,
1AABA83E11B941D1003487D5 /* OOPixMapTextureLoader.h in Headers */,
1A11C2B111CFC35000F3EE77 /* OOJSEngineTimeManagement.h in Headers */,
1A69FFF718A64CF70062EAC8 /* OOJoystickProfile.h in Headers */,
1A143A4811EF22C5001BAB8D /* JAPersistentFileReference.h in Headers */,
1A69FFEE18A64C320062EAC8 /* PlayerEntityStickProfile.h in Headers */,
1AA08606182578AF007CCAEB /* OOALSoundChannel.h in Headers */,
1AA085FE182578AF007CCAEB /* OOALBufferedSound.h in Headers */,
1AB5E1EF12BD628500C334DD /* OOJoystickManager.h in Headers */,
@ -3406,6 +3422,7 @@
1AA08612182578B8007CCAEB /* OOOpenALController.h in Headers */,
1A5D5893182525DE00C779AE /* NSDataOOExtensions.h in Headers */,
1A1F6D0D180AC324002AD52E /* OOWaypointEntity.h in Headers */,
1A4F918019CEDDFB00E18B65 /* OODebugStandards.h in Headers */,
1A1F6D16180AC371002AD52E /* OOJSWaypoint.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -3450,7 +3467,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 0500;
LastUpgradeCheck = 0610;
ORGANIZATIONNAME = "the Oolite team";
};
buildConfigurationList = 08B31CB008FE63D70038D42F /* Build configuration list for PBXProject "Oolite" */;
@ -3515,10 +3532,10 @@
remoteRef = 1A01BCE611C569DF0011197F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
1A1BB8A41767DD3500050283 /* OoliteUnitTests.octest */ = {
1A1BB8A41767DD3500050283 /* OoliteUnitTests.xctest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = OoliteUnitTests.octest;
path = OoliteUnitTests.xctest;
remoteRef = 1A1BB8A31767DD3500050283 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
@ -3730,6 +3747,7 @@
1A9406850BAF66D6005F6CF3 /* OOVoxel.m in Sources */,
1AB01B5F0BB1639600F1B949 /* OOTextureScaling.m in Sources */,
1A5DB1EB0BBD8F0000D57389 /* OOConstToString.m in Sources */,
1AD2E31718F17BC700239EBB /* OOShipLibraryDescriptions.m in Sources */,
1A5DBAA70BC000DC00D57389 /* OOJavaScriptEngine.m in Sources */,
1A5DBAA90BC000DC00D57389 /* OOJSScript.m in Sources */,
1A5DBAAB0BC000DC00D57389 /* OOPListScript.m in Sources */,
@ -3744,6 +3762,7 @@
1A71EA8C0BCF8C6B00CD5C13 /* OOXMLExtensions.m in Sources */,
1A26D0AC0BCF9CF80073F257 /* PlayerEntityLegacyScriptEngine.m in Sources */,
1A26D0AD0BCF9CF80073F257 /* ShipEntityAI.m in Sources */,
B33A44F2199E6745000B45AE /* OOOpenGLMatrixManager.m in Sources */,
1A26D0AF0BCF9CF80073F257 /* PlayerEntityScriptMethods.m in Sources */,
1A26D0B00BCF9CF80073F257 /* PlayerEntityLoadSave.m in Sources */,
1A26D0B10BCF9CF80073F257 /* PlayerEntity.m in Sources */,
@ -3766,9 +3785,12 @@
1A26D0E80BCF9D3B0073F257 /* OOPNGTextureLoader.m in Sources */,
1A26D0EB0BCF9D3B0073F257 /* OOTextureLoader.m in Sources */,
1A43234F0BCFC9BB00F65914 /* OOOpenGLExtensionManager.m in Sources */,
1AB6963D191D85F600E4B232 /* OOStandaloneAtmosphereGenerator.m in Sources */,
1ADBA5510BD0F173008FC99C /* OOBasicMaterial.m in Sources */,
1A5D588A1825241800C779AE /* unzip.c in Sources */,
1A2A16680BD10B1200152975 /* OOSingleTextureMaterial.m in Sources */,
1A4F917E19CEDDC600E18B65 /* OOCommodities.m in Sources */,
1A4F917119CEDD1900E18B65 /* OODebugStandards.m in Sources */,
1A2A17D70BD1587D00152975 /* OOCPUInfo.m in Sources */,
1A2A1B0A0BD276A900152975 /* OOEntityWithDrawable.m in Sources */,
1A2A1B170BD2774300152975 /* OODrawable.m in Sources */,
@ -3795,6 +3817,7 @@
1A73712E0C623DAE0097AC37 /* OOJSStation.m in Sources */,
1A5D5894182525DE00C779AE /* NSDataOOExtensions.m in Sources */,
1A7376BF0C64AE330097AC37 /* OOJSSystem.m in Sources */,
1A4F917819CEDD7900E18B65 /* OOCommodityMarket.m in Sources */,
1A4FB3360C8DC86800DC8E1F /* OOJSOolite.m in Sources */,
1ACEA34A0C91507000C7CE97 /* OORoleSet.m in Sources */,
1ACEA6C00C91DA3E00C7CE97 /* OOJSGlobal.m in Sources */,
@ -3817,6 +3840,7 @@
1AA82C8A0CC10E700023B797 /* OOJSWorldScripts.m in Sources */,
1A7C75C30CC39EC3005D0AA2 /* OOJSSun.m in Sources */,
1AD1F4FF0CD9E83700EAE520 /* NSThreadOOExtensions.m in Sources */,
1A69FFF818A64CF70062EAC8 /* OOJoystickProfile.m in Sources */,
1AC545070D4D228400C90E5B /* OOEncodingConverter.m in Sources */,
1A28AA170D55438200BC0CE4 /* OOJSSound.m in Sources */,
1AB784FA0D554F7B00517983 /* OOJSSoundSource.m in Sources */,
@ -3868,6 +3892,7 @@
1A817DA1106D3FF000AA2F97 /* OOPlasmaBurstEntity.m in Sources */,
1A817DC4106D443B00AA2F97 /* OOFlashEffectEntity.m in Sources */,
2B4CDFED107B3D8400526C98 /* OOJSManifest.m in Sources */,
B3B46C8A1A0D053D00D6C39B /* OOSystemDescriptionManager.m in Sources */,
1AB9AE8C107F459B00B6F3CE /* OOPolygonSprite.m in Sources */,
1A6A963310AEEC5D0065D0F3 /* AIGraphViz.m in Sources */,
1AA7FCAC10C2B9BA0058FBED /* OOPlanetDrawable.m in Sources */,
@ -3890,12 +3915,14 @@
1ACB1D19118DCBC0007B9A1F /* OOConcreteTexture.m in Sources */,
1AEB491B119D5AAA007BD514 /* OORegExpMatcher.m in Sources */,
1A062C8A11B28D8A00727C1D /* NSObjectOOExtensions.m in Sources */,
1A69FFEF18A64C320062EAC8 /* PlayerEntityStickProfile.m in Sources */,
1AABA83F11B941D1003487D5 /* OOPixMapTextureLoader.m in Sources */,
1A11C2B211CFC35000F3EE77 /* OOJSEngineTimeManagement.m in Sources */,
1A143A4911EF22C5001BAB8D /* JAPersistentFileReference.m in Sources */,
1A7038A212BB9F5A0015CCDC /* dummy.cpp in Sources */,
1A09EF4412BD0BCA00BF7F48 /* PlayerEntityStickMapper.m in Sources */,
1AB5E1F012BD628500C334DD /* OOJoystickManager.m in Sources */,
1A05AFCE1879C2B800AFA7D1 /* OOOXZManager.m in Sources */,
1A0942CE12D7D5B9003B6273 /* OOJSFrameCallbacks.m in Sources */,
1AC0F29E12E1DADC00ECBBB0 /* OOJSEngineDebuggerHelpers.m in Sources */,
1A35257312E1FFA900244C9D /* OOConstToJSString.m in Sources */,

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
LastUpgradeVersion = "0610"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -47,7 +47,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1A0CD53515AF0BCE00970505"
BuildableName = "OoliteUnitTests.octest"
BuildableName = "OoliteUnitTests.xctest"
BlueprintName = "OoliteUnitTests"
ReferencedContainer = "container:Mac-specific/OCUnitTests/OoliteUnitTests.xcodeproj">
</BuildableReference>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
LastUpgradeVersion = "0610"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -61,7 +61,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1A0CD53515AF0BCE00970505"
BuildableName = "OoliteUnitTests.octest"
BuildableName = "OoliteUnitTests.xctest"
BlueprintName = "OoliteUnitTests"
ReferencedContainer = "container:Mac-specific/OCUnitTests/OoliteUnitTests.xcodeproj">
</BuildableReference>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
LastUpgradeVersion = "0610"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -61,7 +61,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1A0CD53515AF0BCE00970505"
BuildableName = "OoliteUnitTests.octest"
BuildableName = "OoliteUnitTests.xctest"
BlueprintName = "OoliteUnitTests"
ReferencedContainer = "container:Mac-specific/OCUnitTests/OoliteUnitTests.xcodeproj">
</BuildableReference>

View File

@ -85,7 +85,7 @@ On Linux/BSD/Unix, in a terminal, type 'openapp oolite'
The Oolite source is available from github. Use
git clone https://OoliteProject/oolite
git clone https://github.com/OoliteProject/oolite
to retrieve. Then

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Assassin AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -43,6 +42,7 @@ this.aiStarted = function() {
ai.setWaypointGenerator(ai.waypointsWitchpointPatrol);
}
ai.setParameter("oolite_personalityMatchesLeader",0.9);
ai.setCommunicationsRole("assassin");
ai.setParameter("oolite_flag_witchspacePursuit",true);
@ -67,11 +67,6 @@ this.aiStarted = function() {
behaviour: ai.behaviourEnterWitchspace,
reconsider: 15
},
{
condition: ai.conditionHasRememberedTarget,
behaviour: ai.behaviourFollowCurrentTarget,
reconsider: 15
},
/* Check for couriers */
{
preconfiguration: ai.configurationCheckScanner,
@ -90,8 +85,8 @@ this.aiStarted = function() {
{
preconfiguration: ai.configurationAcquireScannedTarget,
condition: ai.conditionCombatOddsGood,
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 1
behaviour: ai.behaviourAssassinateCurrentTarget,
reconsider: 10
}
]
}
@ -104,6 +99,11 @@ this.aiStarted = function() {
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 20
},
{
condition: ai.conditionHasRememberedTarget,
behaviour: ai.behaviourFollowCurrentTarget,
reconsider: 15
},
{
preconfiguration: ai.configurationAppointGroupLeader,
condition: ai.conditionIsGroupLeader,

View File

@ -28,7 +28,6 @@ MA 02110-1301, USA.
// this is the AI version for a local patrol or an assistant
this.name = "Oolite Bounty Hunter AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -37,6 +36,7 @@ this.aiStarted = function() {
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
ai.setParameter("oolite_personalityMatchesLeader",0.9);
ai.setCommunicationsRole("hunter");
ai.setParameter("oolite_friendlyRoles",["oolite-bounty-hunter"]);
@ -81,7 +81,7 @@ this.aiStarted = function() {
preconfiguration: ai.configurationCheckScanner,
condition: ai.conditionScannerContainsFugitive,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
},
{
@ -92,7 +92,7 @@ this.aiStarted = function() {
* odds they'll never shoot anything */
{
notcondition: ai.conditionCombatOddsBad,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
}
]

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Bounty Hunter Leader AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -36,6 +35,7 @@ this.aiStarted = function() {
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
ai.setParameter("oolite_personalityMatchesLeader",0.9);
ai.setCommunicationsRole("hunter");
ai.setParameter("oolite_friendlyRoles",["oolite-bounty-hunter"]);
@ -64,7 +64,7 @@ this.aiStarted = function() {
preconfiguration: ai.configurationCheckScanner,
condition: ai.conditionScannerContainsFugitive,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
},
{
@ -75,7 +75,7 @@ this.aiStarted = function() {
* odds they'll never shoot anything */
{
notcondition: ai.conditionCombatOddsBad,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
}
]

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Constrictor AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Defense Ship AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -36,7 +35,7 @@ this.aiStarted = function() {
if (this.ship.scanClass == "CLASS_POLICE")
{
ai.setParameter("oolite_friendlyRoles",["oolite-trader","oolite-bounty-hunter","oolite-scavenger","oolite-shuttle"]);
ai.setParameter("oolite_selfDestructAbandonedShip",true);
ai.setParameter("oolite_flag_selfDestructAbandonedShip",true);
ai.setParameter("oolite_flag_markOffenders",true);
}

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Escort AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Missile AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -39,6 +38,13 @@ this.aiStarted = function() {
* destroy the remainder. */
// ai.setParameter("oolite_flag_autoSpreadMissiles",true);
/* Launch correction when fired at target in aft arc */
if (this.ship.target && this.ship.target.position.subtract(this.ship.position).direction().dot(this.ship.vectorForward) < -0.8)
{
this.oolite_priorityai.setParameter("oolite_flag_launchAdjustMissile",true);
}
ai.setPriorities([
{
condition: ai.conditionMissileOutOfFuel,
@ -51,6 +57,12 @@ this.aiStarted = function() {
behaviour: ai.behaviourApproachDestination,
reconsider: 2
},
{
condition: ai.conditionMissileNeedsLaunchEvasion,
configuration: ai.configurationMissileAdjustLaunch,
behaviour: ai.behaviourApproachDestination,
reconsider: 2
},
{
condition: ai.conditionHasTarget,
behaviour: ai.behaviourMissileInterceptTarget,
@ -69,6 +81,7 @@ this.aiStarted = function() {
]);
}
/* ECM response function */
this._ecmProofMissileResponse = function()
{
@ -87,4 +100,5 @@ this._ecmProofMissileResponse = function()
return;
}
this.ship.explode();
}
}

View File

@ -1,3 +1,3 @@
"use strict";
this.name = "Null AI";
this.version = "1.79";
// does nothing

View File

@ -27,13 +27,13 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Pirate AI";
this.version = "1.79";
this.aiStarted = function() {
this.ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setParameter("oolite_flag_watchForCargo",true);
ai.setParameter("oolite_personalityMatchesLeader",0.9);
ai.setCommunicationsRole("pirate");
ai.setParameter("oolite_friendlyRoles",["oolite-pirate"]);

View File

@ -28,13 +28,13 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Pirate Fighter AI";
this.version = "1.79";
this.aiStarted = function() {
this.ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setParameter("oolite_flag_watchForCargo",true);
ai.setParameter("oolite_personalityMatchesLeader",0.95);
ai.setCommunicationsRole("pirate");
ai.setParameter("oolite_friendlyRoles",["oolite-pirate"]);

View File

@ -27,14 +27,21 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Pirate Freighter AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setParameter("oolite_flag_watchForCargo",true);
ai.setCommunicationsRole("pirate");
ai.setParameter("oolite_personalityMatchesLeader",0.95);
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("pirate-freighter").length > 0)
{
ai.setCommunicationsRole("pirate-freighter");
}
else
{
ai.setCommunicationsRole("pirate");
}
ai.setParameter("oolite_friendlyRoles",["oolite-pirate"]);

View File

@ -28,7 +28,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Pirate Interceptor AI";
this.version = "1.79";
this.aiStarted = function() {
this.ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -38,17 +37,27 @@ this.aiStarted = function() {
// to hunt the hunters, go where they go
var searchalgorithm = ai.conditionScannerContainsHunters;
var commsrole = "pirate";
if (this.ship.primaryRole == "pirate-aegis-raider")
{
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("pirate-aegis-raider").length > 0)
{
commsrole = "pirate-aegis-raider";
}
searchalgorithm = ai.conditionScannerContainsCleanShip;
ai.setWaypointGenerator(ai.waypointsStationPatrol);
}
else
{
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("pirate-aegis-raider").length > 0)
{
commsrole = "pirate-interceptor";
}
ai.setWaypointGenerator(ai.waypointsSpacelanePatrol);
}
ai.setCommunicationsRole("pirate");
ai.setParameter("oolite_personalityMatchesLeader",0.95);
ai.setCommunicationsRole(commsrole);
ai.setParameter("oolite_friendlyRoles",["oolite-pirate"]);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Police AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -35,7 +34,7 @@ this.aiStarted = function() {
ai.setParameter("oolite_flag_listenForDistressCall",true);
ai.setParameter("oolite_flag_markOffenders",true);
ai.setParameter("oolite_flag_fightsNearHostileStations",true);
ai.setParameter("oolite_selfDestructAbandonedShip",true);
ai.setParameter("oolite_flag_selfDestructAbandonedShip",true);
if (this.ship.primaryRole == "police-station-patrol")
{
@ -60,6 +59,7 @@ this.aiStarted = function() {
ai.setParameter("oolite_friendlyRoles",["oolite-trader","oolite-bounty-hunter","oolite-scavenger","oolite-shuttle"]);
ai.setParameter("oolite_personalityMatchesLeader",0.5);
ai.setCommunicationsRole("police");
ai.setPriorities([
@ -87,13 +87,13 @@ this.aiStarted = function() {
preconfiguration: ai.configurationCheckScanner,
condition: ai.conditionScannerContainsFugitive,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
},
{
condition: ai.conditionScannerContainsSeriousOffender,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
behaviour: ai.behaviourCommenceAttackOnCurrentTarget,
reconsider: 1
},
{

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Q-bomb AI";
this.version = "1.79";
this.shipWasDumped = function() {
// don't need a priority AI for this one

View File

@ -27,12 +27,18 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Rock Hermit AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setCommunicationsRole("station");
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("hermit").length > 0)
{
ai.setCommunicationsRole("hermit");
}
else
{
ai.setCommunicationsRole("station");
}
ai.setParameter("oolite_friendlyRoles",["oolite-scavenger"]);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Scavenger AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Shuttle AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -35,7 +34,14 @@ this.aiStarted = function() {
ai.setParameter("oolite_flag_sendsDistressCalls",true);
ai.setParameter("oolite_flag_allowPlanetaryLanding",true);
ai.setCommunicationsRole("shuttle");
if (this.ship.primaryRole == "escape-capsule")
{
ai.setCommunicationsRole("escapepod");
}
else
{
ai.setCommunicationsRole("shuttle");
}
ai.setParameter("oolite_friendlyRoles",["oolite-pirate-victim"]);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Main Station AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Tharglet AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -37,6 +36,7 @@ this.aiStarted = function() {
ai.setParameter("oolite_flag_fightsNearHostileStations",true);
ai.setParameter("oolite_flag_scanIgnoresUnpowered",true);
ai.setParameter("oolite_flag_likesInterstellarSpace",true);
ai.setPriorities([
/* Check for mothership */

View File

@ -27,12 +27,13 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Thargoid AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setParameter("oolite_flag_fightsNearHostileStations",true);
ai.setParameter("oolite_flag_likesInterstellarSpace",true);
ai.setCommunicationsRole("_thargoid");
ai.setCommunicationsPersonality("thargoid");

View File

@ -27,7 +27,6 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Trader AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
@ -36,17 +35,29 @@ this.aiStarted = function() {
ai.setParameter("oolite_flag_surrendersEarly",true);
ai.setParameter("oolite_flag_escortsCoverRetreat",true);
ai.setCommunicationsRole("trader");
var commsrole = "trader";
var cautionscan = ai.conditionScannerContainsTraderEnemy;
// same AI works for freighters, couriers and smugglers with minimal
// modification
if (this.ship.primaryRole == "trader-smuggler")
{
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("trader-smuggler").length > 0)
{
commsrole = "trader-smuggler";
}
cautionscan = ai.conditionScannerContainsTraderSmugglerEnemy;
ai.setParameter("oolite_flag_fleesPreemptively",true);
}
else if (this.ship.primaryRole == "trader-courier")
{
ai.setParameter("oolite_flag_noDockingUntilDestination",true);
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("trader-courier").length > 0)
{
commsrole = "trader-courier";
}
}
ai.setCommunicationsRole(commsrole);
ai.setParameter("oolite_friendlyRoles",["oolite-trader"]);
@ -78,6 +89,20 @@ this.aiStarted = function() {
behaviour: ai.behaviourLeaveVicinityOfDestination,
reconsider: 20
},
{
// if not near a friendly station, move away from
// potentially hostile ships
condition: ai.conditionFriendlyStationNearby,
falsebranch: [
{
preconfiguration: ai.configurationCheckScanner,
condition: cautionscan,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourLeaveVicinityOfTarget,
reconsider: 20
}
]
},
{
condition: ai.conditionCargoIsProfitableHere,
// branch to head for station

View File

@ -28,14 +28,20 @@ MA 02110-1301, USA.
"use strict";
this.name = "Oolite Trader Opportunist AI";
this.version = "1.79";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setParameter("oolite_flag_sendsDistressCalls",true);
ai.setCommunicationsRole("trader");
if (worldScripts["oolite-libPriorityAI"]._getCommunicationPersonalities("trader-opportunist").length > 0)
{
ai.setCommunicationsRole("trader-opportunist");
}
else
{
ai.setCommunicationsRole("trader");
}
ai.setPriorities([
{
@ -76,8 +82,13 @@ this.aiStarted = function() {
{
condition: ai.conditionScannerContainsLoneVictim,
configuration: ai.configurationAcquireScannedTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 20
truebranch: [
{
condition: ai.conditionCombatOddsGood,
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 20
}
]
},
{
condition: ai.conditionCargoIsProfitableHere,

View File

@ -0,0 +1,63 @@
/*
oolite-tutorialFighterAI.js
AI for the tutorial simulated combat
Oolite
Copyright © 2004-2013 Giles C Williams and contributors
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., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
*/
"use strict";
this.name = "Oolite Tutorial Fighter AI";
this.aiStarted = function() {
var ai = new worldScripts["oolite-libPriorityAI"].PriorityAIController(this.ship);
ai.setCommunicationsRole("_tutorial");
ai.setPriorities([
/* Fight */
{
condition: ai.conditionInCombat,
configuration: ai.configurationAcquireCombatTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 30 // makes missiles more distracting
},
/* Stop following me! */
{
condition: ai.conditionPlayerNearby,
configuration: ai.configurationAcquirePlayerAsTarget,
behaviour: ai.behaviourDestroyCurrentTarget,
reconsider: 5
},
/* Chase Player */
{
configuration: function() {
this.ship.destination = player.ship.position;
this.ship.desiredSpeed = 300;
},
behaviour: ai.behaviourApproachDestination,
reconsider: 5
}
],3+Math.random()+Math.random());
}

@ -1 +1 @@
Subproject commit 6c120f7a1b6e60e4c12d8facd3c39b4fc4b9c299
Subproject commit f5aed27fefc32c24775b39fce25402b970b09b84

View File

@ -15,6 +15,9 @@
*/
{
"assassin-light" = "oolite-assassinAI.js";
"assassin-medium" = "oolite-assassinAI.js";
"assassin-heavy" = "oolite-assassinAI.js";
"asteroid" = "dumbAI.plist";
"escort" = "oolite-escortAI.js";
"hunter" = "oolite-bountyHunterAI.js";

View File

@ -1,74 +0,0 @@
/* The values are:
1. The name of the commodity
2. Units available at a market (this is calculated at each marketplace)
3. Price per unit at a market (this is calculated at each marketplace)
4. The base price per unit MARKET_BASE_PRICE ( base price x 1/4 )
5. An adjustment to price based on the economy MARKET_ECO_ADJUST_PRICE ( price adjust )
6. An adjustment to units availble based on the economy MARKET_ECO_ADJUST_QUANTITY ( quantity adjust )
7. The base quantity available to a market MARKET_BASE_QUANTITY ( base quantity )
8. A 'mask' which defines how the price varies MARKET_MASK_PRICE ( price mask )
9. A 'mask' which defines how the quantity varies MARKET_MASK_QUANTITY ( quantity mask )
10. The unit of quantity (0 == tons, 1 == kilos, 2 == grams) units
*/
{
default =
(
( "Food", 0, 0, 19, -2, -2, 6, 1, 1, 0 ),
( "Textiles", 0, 0, 20, -1, -1, 10, 3, 3, 0 ),
( "Radioactives", 0, 0, 65, -3, -3, 2, 7, 7, 0 ),
( "Slaves", 0, 0, 40, -5, -5, 226, 31, 31, 0 ),
( "Liquor/Wines", 0, 0, 83, -5, -5, 251, 15, 15, 0 ),
( "Luxuries", 0, 0, 196, 8, 8, 54, 3, 3, 0 ),
( "Narcotics", 0, 0, 235, 29, 29, 8, 120, 120, 0 ),
( "Computers", 0, 0, 154, 14, 14, 56, 3, 3, 0 ),
( "Machinery", 0, 0, 117, 6, 6, 40, 7, 7, 0 ),
( "Alloys", 0, 0, 78, 1, 1, 17, 31, 31, 0 ),
( "Firearms", 0, 0, 124, 13, 13, 29, 7, 7, 0 ),
( "Furs", 0, 0, 176, -9, -9, 220, 63, 63, 0 ),
( "Minerals", 0, 0, 32, -1, -1, 53, 3, 3, 0 ),
( "Gold", 0, 0, 97, -1, -1, 66, 7, 7, 1 ),
( "Platinum", 0, 0, 171, -2, -2, 55, 31, 31, 1 ),
( "Gem-Stones", 0, 0, 45, -1, -1, 250, 15, 15, 2 ),
( "Alien Items", 0, 0, 53, 15, 0, 0, 7, 0, 0 )
);
rockhermit =
(
( "Food", 0, 0, 19, -2, 0, 0, 1, 0, 0 ),
( "Textiles", 0, 0, 20, -1, 0, 0, 3, 0, 0 ),
( "Radioactives", 0, 0, 42, -3, -3, 1, 7, 3, 0 ),
( "Slaves", 0, 0, 40, -5, 0, 0, 31, 0, 0 ),
( "Liquor/Wines", 0, 0, 105, -5, 0, 0, 15, 0, 0 ),
( "Luxuries", 0, 0, 236, 8, 0, 0, 3, 0, 0 ),
( "Narcotics", 0, 0, 235, 29, 0, 0, 120, 0, 0 ),
( "Computers", 0, 0, 51, 14, 0, 0, 3, 0, 0 ),
( "Machinery", 0, 0, 117, 6, 0, 0, 7, 0, 0 ),
( "Alloys", 0, 0, 78, 1, 0, 0, 31, 0, 0 ),
( "Firearms", 0, 0, 32, 13, 0, 0, 7, 0, 0 ),
( "Furs", 0, 0, 36, -9, 0, 0, 63, 0, 0 ),
( "Minerals", 0, 0, 16, -1, -1, 85, 3, 3, 0 ),
( "Gold", 0, 0, 73, -1, -1, 5, 7, 3, 1 ),
( "Platinum", 0, 0, 145, -2, -2, 6, 31, 7, 1 ),
( "Gem-Stones", 0, 0, 25, -1, -1, 250, 15, 15, 2 ),
( "Alien Items", 0, 0, 22, 15, 0, 0, 7, 0, 0 )
);
none =
(
( "Food", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Textiles", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Radioactives", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Slaves", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Liquor/Wines", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Luxuries", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Narcotics", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Computers", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Machinery", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Alloys", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Firearms", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Furs", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Minerals", 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
( "Gold", 0, 0, 0, 0, 0, 0, 0, 0, 1 ),
( "Platinum", 0, 0, 0, 0, 0, 0, 0, 0, 1 ),
( "Gem-Stones", 0, 0, 0, 0, 0, 0, 0, 0, 2 ),
( "Alien Items", 0, 0, 0, 0, 0, 0, 0, 0, 0 )
);
}

View File

@ -3,7 +3,6 @@
"coriolis-station",
"boa-mk2",
transporter,
alloy,
cobramk1,
worm,
viper,

View File

@ -803,6 +803,35 @@
"You docked without any clearance. For violating the station's docking protocol you have been fined %@."
);
// components of the tutorial's docking helper
"oolite-tutorial-dock-notarget" = "Use your identification system to target the station you wish to dock with to activate the docking assessment system.";
"oolite-tutorial-dock-weapons" = "Weapons: ";
"oolite-tutorial-dock-weapons-good" = "Disarmed\n";
"oolite-tutorial-dock-weapons-bad" = "Armed (press '[oolite_key_weapons_online_toggle]')\n";
"oolite-tutorial-dock-clearance" = "Clearance: ";
"oolite-tutorial-dock-clearance-good" = "Granted\n";
"oolite-tutorial-dock-clearance-expiring" = "Expiring ('[oolite_key_docking_clearance_request]' to extend)\n";
"oolite-tutorial-dock-clearance-bad" = "None (press '[oolite_key_docking_clearance_request]' to request)\n";
"oolite-tutorial-dock-clearance-wait" = "Waiting\n";
"oolite-tutorial-dock-approach" = "Approach: ";
"oolite-tutorial-dock-approach-good" = "On course\n";
"oolite-tutorial-dock-approach-okay" = "Adequate\n";
"oolite-tutorial-dock-approach-off" = "Off centre\n";
"oolite-tutorial-dock-approach-bad" = "Off course\n";
"oolite-tutorial-dock-speed" = "Speed: ";
"oolite-tutorial-dock-speed-fast" = "Too fast\n";
"oolite-tutorial-dock-speed-good" = "Good\n";
"oolite-tutorial-dock-speed-slow" = "Too slow\n";
"oolite-tutorial-dock-roll" = "Roll: ";
"oolite-tutorial-dock-roll-good" = "Matched\n";
"oolite-tutorial-dock-roll-okay" = "Adequate\n";
"oolite-tutorial-dock-roll-bad" = "Off course\n";
// system description after a nova
"nova-system-description" =
(
@ -818,6 +847,12 @@
"@-damaged" = "%@ damaged.";
"@-destroyed" = "%@ destroyed.";
// beacon labels
"oolite-beacon-label-station" = "%H Station";
"oolite-beacon-label-witchpoint" = "Witchpoint";
"oolite-beacon-label-target" = "Target";
"oolite-default-star-name" = "Star";
// icons for the hud
"EQ_HARDENED_MISSILE" =
(
@ -1000,12 +1035,328 @@
"unknown-ship-@" = "Unknown Ship '%@'.";
// Intro1 screen
"game-copyright" = "by Giles Williams, Jens Ayton and contributors © 20032013";
"game-copyright" = "by Giles Williams, Jens Ayton and contributors © 20032014";
"theme-music-credit" = "Oolite Theme Music by NoSleep © 2004";
"load-previous-commander" = "Load Previous Commander (Y/N)?";
"load-previous-commander-yes" = "y"; // Defines the key that corresponds to the yes answer to load-previous-commander.
"load-previous-commander-no" = "n"; // Defines the key that corresponds to the no answer to load-previous-commander.
"oolite-start-option-1" = " Start New Commander ";
"oolite-start-option-2" = " Load Commander ";
"oolite-start-option-3" = " View Ship Library ";
"oolite-start-option-4" = " View Keyboard Settings ";
"oolite-start-option-5" = " Manage Expansion Packs ";
"oolite-start-option-6" = " Exit Game ";
"oolite-newgame-title" = "Start New Commander";
"oolite-ship-library-title" = "Ship Library";
"oolite-ship-library-exit" = "Use arrow keys to view ships; press space to exit library";
"oolite-ship-library-classified" = "Classified";
"oolite-ship-library-unknown" = "Unknown";
"oolite-ship-library-category-ship" = "Ship";
"oolite-ship-library-category-station" = "Installation";
"oolite-ship-library-category-weapon" = "Weapon";
"oolite-ship-library-category-thargoid" = "Thargoid Ship";
"oolite-ship-library-category-misc" = "Miscellaneous";
"oolite-ship-library-category-plural-ship" = "Ships";
"oolite-ship-library-category-plural-station" = "Installations";
"oolite-ship-library-category-plural-weapon" = "Weapons";
"oolite-ship-library-category-plural-thargoid" = "Thargoid Ships";
"oolite-ship-library-category-plural-misc" = "Miscellaneous";
"oolite-ship-library-speed-custom" = "Speed: %@";
"oolite-ship-library-speed-stationary" = "Speed: Stationary";
"oolite-ship-library-speed-veryslow" = "Speed: Very Slow";
"oolite-ship-library-speed-slow" = "Speed: Slow";
"oolite-ship-library-speed-average" = "Speed: Average";
"oolite-ship-library-speed-fast" = "Speed: Fast";
"oolite-ship-library-speed-veryfast" = "Speed: Very Fast";
"oolite-ship-library-turn-custom" = "Turn rate: %@";
"oolite-ship-library-turn-veryslow" = "Turn rate: Very Slow";
"oolite-ship-library-turn-slow" = "Turn rate: Slow";
"oolite-ship-library-turn-average" = "Turn rate: Average";
"oolite-ship-library-turn-fast" = "Turn rate: Fast";
"oolite-ship-library-turn-veryfast" = "Turn rate: Very Fast";
"oolite-ship-library-cargo-custom" = "Cargo: %@";
"oolite-ship-library-cargo-none" = "Cargo: None";
"oolite-ship-library-cargo-carried-u" = "Cargo: %u TC";
"oolite-ship-library-generator-custom" = "Generator: %@";
"oolite-ship-library-generator-weak" = "Generator: Weak";
"oolite-ship-library-generator-average" = "Generator: Average";
"oolite-ship-library-generator-strong" = "Generator: Strong";
"oolite-ship-library-shields-custom" = "Shields: %@";
"oolite-ship-library-shields-veryweak" = "Shields: Very Weak";
"oolite-ship-library-shields-weak" = "Shields: Weak";
"oolite-ship-library-shields-average" = "Shields: Average";
"oolite-ship-library-shields-strong" = "Shields: Strong";
"oolite-ship-library-shields-verystrong" = "Shields: Very Strong";
"oolite-ship-library-witchspace-custom" = "Witchspace: %@";
"oolite-ship-library-witchspace-yes" = "Witchspace: Yes";
"oolite-ship-library-witchspace-no" = "Witchspace: No";
"oolite-ship-library-weapons-custom" = "Weapons: %@";
"oolite-ship-library-weapons-none" = "Weapons: None";
"oolite-ship-library-weapons-u-u" = "Weapons: %u fixed, %u pylons";
"oolite-ship-library-size-custom" = "Size: %@";
"oolite-ship-library-size-u-u-u" = "Size: %um x %um x %um";
"oolite-ship-library-summary-CG" = "Goods container";
"oolite-ship-library-summary-CP" = "Evacuation ship";
"oolite-ship-library-summary-HF" = "Heavy fighter";
"oolite-ship-library-summary-HFr" = "Heavy freighter";
"oolite-ship-library-summary-HT" = "Heavy transport";
"oolite-ship-library-summary-HM" = "Heavy multi-role";
"oolite-ship-library-summary-LF" = "Light fighter";
"oolite-ship-library-summary-LFr" = "Light freighter";
"oolite-ship-library-summary-LM" = "Light multi-role";
"oolite-ship-library-summary-LT" = "Light transport";
"oolite-ship-library-summary-MF" = "Medium fighter";
"oolite-ship-library-summary-MFr" = "Medium freighter";
"oolite-ship-library-summary-MM" = "Medium multi-role";
"oolite-ship-library-summary-MT" = "Medium transport";
"oolite-ship-library-summary-NB" = "Natural body";
"oolite-ship-library-summary-PHF" = "Police heavy fighter";
"oolite-ship-library-summary-PLF" = "Police light fighter";
"oolite-ship-library-summary-RW" = "Recon warship";
"oolite-ship-library-summary-SM" = "Mining installation";
"oolite-ship-library-summary-SA" = "Navigation aid";
"oolite-ship-library-summary-SO" = "Orbital station";
"oolite-ship-library-summary-WMn" = "Timed explosive";
"oolite-ship-library-summary-WMs" = "Fire-and-forget missile";
"oolite-ship-library-description-adder" = "The Adder is the smallest ship capable of fitting a witchdrive. It has little else to recommend it other than extreme manoeuvrability, but its low price and reliability makes it useful in high-risk mining and salvage operations";
"oolite-ship-library-description-anaconda" = "The Anaconda's large interior is almost entirely cargo space, leaving the ship little room for engines or generators. As a bulk cargo hauler, however, no other ship can carry anywhere near as much - but it requires a strong escort in all but the safest systems.";
"oolite-ship-library-description-asp" = "The Asp is a pure fighter, with powerful shields and excellent speed. It is most popular with military organisations where the lack of cargo space and singular missile pylon are not significant disadvantages, but it also sees some more peaceful use as a fast courier.";
"oolite-ship-library-description-asteroid" = "Asteroids and other smaller rocky bodies are found throughout Cooperative space. As a minor hazard to navigation there is a small fee paid for their destruction, but more usually they are broken apart by mining ships for possible mineral content.";
"oolite-ship-library-description-barrel" = "The majority of trade goods are shipped in standard 1 TC containers. The containers are relatively sturdy and occasionally survive the destruction of the ship carrying them - all traders are recommended to travel with sufficient escort to deter this form of piracy.";
"oolite-ship-library-description-boa" = "The Boa is the modern mainstay of the freight corporations, largely replacing the older Python design, which it outclasses in most respects - it is larger, faster, and better able to protect itself.";
"oolite-ship-library-description-boa-mk2" = "The Boa Cruiser is a significant refinement of the basic Boa design, using the latest advances in system miniaturisation, and the fitting of a military-grade drive system, to give a fast freighter with 40 percent more cargo space than the basic Boa. So far, it has only been practical to produce in relatively small quantities.";
"oolite-ship-library-description-buoy" = "The standard navigation buoy marks places of interest such as Cooperative orbital stations and the system witchspace exit point. It is equipped with a powerful radio transmitter which can be detected across the entire system by an Advanced Space Compass.";
"oolite-ship-library-description-cobra3" = "The first truly successful multi-role design, with enough cargo space to trade or salvage effectively, and enough firepower not to need an escort while doing so. Its introduction led to a significant rise in the number of independent pilots - traders, bounty hunters and pirates - operating outside traditional corporate and criminal power structures.";
"oolite-ship-library-description-cobramk1" = "The original Cobra design was the first attempt at a multi-role craft. While relatively good for its day, more modern craft have superseded it. It still sees use from those who need flexibility and can't afford better, especially pirates and miners.";
"oolite-ship-library-description-coriolis" = "The Coriolis Station is the standard Cooperative orbital station seen in almost all systems. A kilometre across, with room for over a hundred ships and tens of thousands of inhabitants, these stations are key trading hubs for their systems, as well as housing several police Viper patrols.";
"oolite-ship-library-description-dodec" = "The Dodecahedron station has replaced the Coriolis in many richer systems as its internal layout provides a greater number of decks at a suitable gravity for luxury space-side accommodation. The easy access to corporate executives makes them centres of trade for entire regions.";
"oolite-ship-library-description-hardmissile" = "With countermeasures (and the Thargoid equivalent) sufficient to render standard missiles almost useless, military forces and wealthy civilians are often willing to pay over ten times the cost of a standard missile for the HMX5. The payload and range is the same as the HM3, but it has a sophisticated sensor suite almost immune to modern countermeasures systems.";
"oolite-ship-library-description-escape" = "The Escape Capsule provides a last-resort means of evacuation from a doomed ship. It is fragile and slow, but even criminal pilots will usually scoop them up and bring them to safety for a no-questions-asked recovery fee.";
"oolite-ship-library-description-ferdelance" = "The Fer-de-lance is officially classified as a medium transport, fitted out with luxury passenger cabins for rich travellers. Hunters, pirates, and assassins, however, have discovered that if refitted for combat its narrow profile and high speed makes an excellent hit-and-run fighter.";
"oolite-ship-library-description-gecko" = "The Gecko is an extremely effective combat ship, not far behind the Asp in effectiveness but considerably easier to maintain - the space saved by not fitting a witchdrive means that far less miniaturisation is required for the remaining components. Very popular both as a heavy escort and a pirate fighter";
"oolite-ship-library-description-ico" = "The Icosahedron station is a modern design slowly replacing the Coriolis in richer systems. Its internal layout is designed around its shipyard and hangar - while it has less accommodation and cargo space than the Coriolis, it can carry twice as many ships, supported by fully-equipped maintenance bays.";
"oolite-ship-library-description-krait" = "The Krait is an old light fighter design, originally made in the millions, but rarely produced today. Its only remaining advantage is ease of customisation - the Mamba has superseded it in almost every niche as a light fighter.";
"oolite-ship-library-description-mamba" = "The premier modern civilian light fighter, this is one of the most common escort craft, used by traders, pirates and bounty hunters alike. Cheap and easy to maintain, it can still hold its own against much larger ships.";
"oolite-ship-library-description-missile" = "The HM3 missile available at almost all stations, this is faster than even the fastest Cooperative ship, and has a maximum range of 30km, continuing to home in even if the launching ship is destroyed. It is extremely vulnerable to counter-measures systems, which will cause it to lose target lock and explode";
"oolite-ship-library-description-moray" = "This light ship is popular for small transport jobs, especially of medical supplies, due to its agility and ability to operate in a wide range of environments. This also makes it popular with smaller pirate bands, who are unable to acquire a dedicated freighter.";
"oolite-ship-library-description-python" = "The aging Python design is falling out of favour with traders as the more modern Boa supersedes it. It is still extremely popular with pirates as it is famously easy to repair, and new traders may find they are unable to afford anything better.";
"oolite-ship-library-description-qbomb" = "The Quirium Cascade Mine is an extremely powerful timed weapon, rarely used by civilians due to its ability to destroy a wide area including the launching ship. Fuel stores aboard ships hit by its blast create a secondary explosion of equal power, making the exact level of destruction hard to control.";
"oolite-ship-library-description-rockhermit" = "The largest asteroids are often hollowed out, both for internal mining operations and as a convenient base for mining ships to operate from. Their isolated nature also makes them a common pirate haunt, especially in the less stable systems.";
"oolite-ship-library-description-shuttle" = "These light unarmed ships are regularly used to transfer personnel and cargo between a planet's surface and its orbital stations. Their slow speed and poor endurance means that they are rarely seen away from the planet.";
"oolite-ship-library-description-sidewinder" = "An excellent light fighter often deployed by military forces to support larger ships such as the Asp, it is also commonly used by trading corporations as an escort fighter. Pirates rarely use this ship as its military heritage makes it difficult to maintain.";
"oolite-ship-library-description-tharglet" = "The Thargon Drone fighter is carried in large numbers by Thargoid warships. It is lightly armed and fragile, though its tiny size makes it almost impossible to hit. Most pilots ignore these as much as possible and concentrate on destroying the warship, which will make these ships enter an inert state.";
"oolite-ship-library-description-thargoid" = "The Thargoid Warship is the smallest independent Thargoid craft generally encountered, and appears to currently be used as a recon ship and opportunistic raider. It is faster than most Cooperative ships, and incredibly well-shielded. Its primary weapon is a laser turret with full sphere coverage, but its drone fighters often do more damage.";
"oolite-ship-library-description-thargoid-weapons" = "1 laser turret, drone fighters.";
"oolite-ship-library-description-transporter" = "The Transporter is the most common ship used for in-system cargo and personnel transfers, with more range and capacity than the orbital shuttle. It is usually unarmed, though some fit a mining laser to make asteroid mining more efficient.";
"oolite-ship-library-description-viper" = "The Viper patrol craft is seen in every system - in greater or lesser numbers - protecting the space lanes and the Cooperative stations. Its design is starting to show its age especially against modern fighter craft, but most criminals will still retreat when confronted by a full patrol wing.";
"oolite-ship-library-description-viperinterceptor" = "This next generation police fighter has recently been introduced as a replacement for the aging Viper design. Expensive to build and maintain, it is rarely seen except in the richest systems, where it is extremely effective in securing the space lanes against piracy.";
"oolite-ship-library-description-worm" = "A light transport craft similar to the orbital shuttle in capacity but with a longer range. Its weapon mounting is usually used by miners for a cheap mining ship, but particularly desperate pilots have been known to fit it with a pulse laser and use it as a (very) light escort craft.";
"oolite-keysetting-screen" = "Keyboard Settings";
"oolite-keysetting-text" = "See documentation for more information. Press space to return to the menu";
"oolite-keydesc-key_roll_left" = "Roll left";
"oolite-keydesc-key_roll_right" = "Roll right";
"oolite-keydesc-key_pitch_forward" = "Pitch down";
"oolite-keydesc-key_pitch_back" = "Pitch up";
"oolite-keydesc-key_yaw_left" = "Yaw left";
"oolite-keydesc-key_yaw_right" = "Yaw right";
"oolite-keydesc-key_view_forward" = "Forward view";
"oolite-keydesc-key_view_aft" = "Aft view";
"oolite-keydesc-key_view_port" = "Port view";
"oolite-keydesc-key_view_starboard" = "Starboard view";
"oolite-keydesc-key_gui_screen_status" = "Status screens";
"oolite-keydesc-key_gui_chart_screens" = "Chart screens";
"oolite-keydesc-key_gui_system_data" = "System screens";
"oolite-keydesc-key_gui_market" = "Market screens";
"oolite-keydesc-key_gui_arrow_left" = "GUI Left";
"oolite-keydesc-key_gui_arrow_right" = "GUI Right";
"oolite-keydesc-key_gui_arrow_up" = "GUI Up";
"oolite-keydesc-key_gui_arrow_down" = "GUI Down";
"oolite-keydesc-key_increase_speed" = "Accelerate";
"oolite-keydesc-key_decrease_speed" = "Decelerate";
"oolite-keydesc-key_inject_fuel" = "Fuel Injectors";
"oolite-keydesc-key_fire_lasers" = "Fire laser";
"oolite-keydesc-key_weapons_online_toggle" = "Weapons toggle";
"oolite-keydesc-key_launch_missile" = "Launch missile";
"oolite-keydesc-key_next_missile" = "Next missile";
"oolite-keydesc-key_ecm" = "ECM";
"oolite-keydesc-key_prime_equipment" = "Select item";
"oolite-keydesc-key_activate_equipment" = "Item button 1";
"oolite-keydesc-key_mode_equipment" = "Item button 2";
"oolite-keydesc-key_fastactivate_equipment_a" = "Item shortcut 1";
"oolite-keydesc-key_fastactivate_equipment_b" = "Item shortcut 2";
"oolite-keydesc-key_target_incoming_missile" = "Target incoming";
"oolite-keydesc-key_target_missile" = "Target missile";
"oolite-keydesc-key_untarget_missile" = "Untarget missile";
"oolite-keydesc-key_ident_system" = "Ident system";
"oolite-keydesc-key_scanner_zoom" = "Zoom scanner";
"oolite-keydesc-key_scanner_unzoom" = "Unzoom scanner";
"oolite-keydesc-key_launch_escapepod" = "Escape Pod";
"oolite-keydesc-key_galactic_hyperspace" = "Galactic jump";
"oolite-keydesc-key_hyperspace" = "Witchspace jump";
"oolite-keydesc-key_jumpdrive" = "Torus drive";
"oolite-keydesc-key_dump_cargo" = "Dump cargo";
"oolite-keydesc-key_rotate_cargo" = "Rotate cargo";
"oolite-keydesc-key_autopilot" = "Docking computer";
"oolite-keydesc-key_autodock" = "Fast docking";
"oolite-keydesc-key_docking_clearance_request" = "Request clearance";
"oolite-keydesc-key_snapshot" = "Take snapshot";
"oolite-keydesc-key_docking_music" = "Docking music";
"oolite-keydesc-key_advanced_nav_array" = "Route planner";
"oolite-keydesc-key_map_home" = "Home map";
"oolite-keydesc-key_map_info" = "Show chart icons";
"oolite-keydesc-key_pausebutton" = "Pause";
"oolite-keydesc-key_show_fps" = "Show FPS";
"oolite-keydesc-key_mouse_control" = "Mouse control";
"oolite-keydesc-key_hud_toggle" = "Toggle HUD";
"oolite-keydesc-key_comms_log" = "Comms log";
"oolite-keydesc-key_prev_compass_mode" = "ASC back";
"oolite-keydesc-key_next_compass_mode" = "ASC forward";
"oolite-keydesc-key_chart_highlight" = "Chart highlight";
"oolite-keydesc-key_cycle_mfd" = "Cycle MFD";
"oolite-keydesc-key_switch_mfd" = "Select MFD";
"oolite-keydesc-key_next_target" = "Next target";
"oolite-keydesc-key_previous_target" = "Previous target";
"oolite-keydesc-key_custom_view" = "External view";
"oolite-loadsave-exit" = "Return to Menu";
"oolite-scenario-exit" = "Return to Menu";
"oolite-scenario-standard-name" = "Normal Start";
"oolite-scenario-strict-name" = "Strict Mode";
"oolite-scenario-tutorial-name" = "Tutorial";
"oolite-scenario-standard-description" = "Start with a Cobra Mk III and 100 credits at Lave station, and try to make a living.";
"oolite-scenario-strict-description" = "Strict Mode starts like the normal start, but all expansion packs are permanently disabled for this Commander.";
"oolite-scenario-tutorial-description" = "Take a standard Cooperative flight training course, including simulated combat and docking practice.";
"oolite-oxzmanager-title" = "Expansion Pack Manager";
"oolite-oxzmanager-title-downloading" = "Downloading file...";
"oolite-oxzmanager-title-dependencies" = "Additional packs required...";
"oolite-oxzmanager-title-install" = "Select pack to install";
"oolite-oxzmanager-title-installed" = "Select pack to update";
"oolite-oxzmanager-title-remove" = "Select pack to remove";
"oolite-oxzmanager-title-setfilter" = "Set expansion pack filter";
"oolite-oxzmanager-title-infopage" = "Expansion pack details";
"oolite-oxzmanager-title-extract" = "Extract expansion pack";
"oolite-oxzmanager-exit" = "Return to Menu";
"oolite-oxzmanager-exit-restart" = "Return to Menu (applies changes)";
"oolite-oxzmanager-acknowledge" = "Continue";
"oolite-oxzmanager-cancel" = "Cancel Download";
"oolite-oxzmanager-dependencies-yes-all" = "Download all additional required packs";
"oolite-oxzmanager-dependencies-yes" = "Download next additional required pack";
"oolite-oxzmanager-dependencies-no" = "Do not download additional packs";
"oolite-oxzmanager-download-list" = "Download expansions list";
"oolite-oxzmanager-update-list" = "Update expansions list";
"oolite-oxzmanager-download-noupdate" = "Keep current expansions list";
"oolite-oxzmanager-install" = "Install expansion pack";
"oolite-oxzmanager-installed" = "List installed expansion packs";
"oolite-oxzmanager-remove" = "Remove expansion pack";
"oolite-oxzmanager-firstrun" = "Before Oolite can install your requested expansions automatically, it needs to retrieve the expansions list. You will need to be connected to the internet for this to work. Use the 'Download expansions list' option when you are ready, or 'Return to Menu' if you do not have internet access now or would rather download and install expansions yourself.\n\nImportant: if you have old expansion packs installed in the OXP format, Oolite will not be able to automatically detect that they are the same pack as a new release. When downloading an expansion through this manager, you must first uninstall any old OXP versions of the same expansion to avoid problems.";
"oolite-oxzmanager-secondrun" = "Your expansion list may be out of date. Do you want to download the latest list now?\n\nIf you keep the old list, some installations may fail as the expansion pack is no longer available at that location or for that version. However, if you only want to uninstall expansion packs, you do not need to update the list.\n\nIf you need to update the list later, you can do this by selecting 'Update expansions list' from the menu.";
"oolite-oxzmanager-intro" = "Oolite can automatically install some expansions for you if you are connected to the internet. Use the 'Update expansions list' option to retrieve the latest expansions list, and the 'Install expansions' and 'Remove expansions' options to add and remove expansion packs.\n\nThere are also many more expansion packs not available through the automatic installer.\n\nImportant: if you have old expansion packs installed in the OXP format, Oolite will not be able to automatically detect that they are the same pack as a new release. When downloading an expansion through this manager, you must first uninstall any old OXP versions of the same expansion to avoid problems.\n\nIf an expansion pack requires other expansion packs to run, Oolite will automatically download those other expansion packs for you, if they are available.";
"oolite-oxzmanager-nothing-removable" = "Oolite can only remove expansion packs which have been added through this system, and there are currently none installed, or all installed packs have been filtered out. Expansion packs which you have installed manually must also be removed manually. Oolite is not able to manage old OXP format expansion packs for you.";
"oolite-oxzmanager-restart" = "As you have changed the expansion packs you have installed, Oolite now needs to reload the game data. This may take a few seconds or several minutes depending on how fast your computer is and how many packs you have installed. Please be patient while this reload completes: Oolite will not respond to the keyboard or mouse until this is done.";
"oolite-oxzmanager-progress-@-is-@-of-@" = "Downloading %@: %@ of %@";
"oolite-oxzmanager-download-label-list" = "OXZ List";
"oolite-oxzmanager-download-label-oxz" = "Expansion";
"oolite-oxzmanager-progress-done-%u-%u" = "Download complete. There are now %u expansion packs available for download, and %u pack(s) have been installed here.";
"oolite-oxzmanager-removal-done" = "Expansion pack removed";
"oolite-oxzmanager-progress-error" = "Download failed! See Latest.log for more details. Using the '[oolite-oxzmanager-update-list]' menu option if you have not done so already and re-attempting the download may sometimes fix the problem.";
"oolite-oxzmanager-progress-requires-@" = "Unmet requirement: %@\n";
"oolite-oxzmanager-progress-now-has-@" = "Now met requirement: %@\n";
"oolite-oxzmanager-progress-get-required" = "Download additional OXZ to meet requirements?\n";
"oolite-oxzmanager-progress-required-@-not-found" = "Unable to meet requirement: %@\n You will need to resolve this manually.\n";
"oolite-oxzmanager-dependencies-decision" = "Additional installs are required: do you wish to proceed?";
"oolite-oxzmanager-heading-category" = "Category";
"oolite-oxzmanager-heading-title" = "Title";
"oolite-oxzmanager-heading-version" = "Version";
"oolite-oxzmanager-heading-downloadable"= "Available";
"oolite-oxzmanager-heading-installed" = "Installed";
"oolite-oxzmanager-infoline-url" = "URL: ";
"oolite-oxzmanager-infoline-size" = "Download size: ";
"oolite-oxzmanager-missing-field" = "Unknown";
"oolite-oxzmanager-version-none" = "-";
"oolite-oxzmanager-installable-okay" = "Status: Ready to download and install.";
"oolite-oxzmanager-installable-update" = "Status: Installed; updated pack available for download.";
"oolite-oxzmanager-installable-depend" = "Status: Ready to download, but Oolite will also download extra packs to make it work.";
"oolite-oxzmanager-installable-conflicts" = "Status: Conflicts with an already installed pack.";
"oolite-oxzmanager-installable-already" = "Status: Installed and at the current version.";
"oolite-oxzmanager-installable-manual" = "Status: Manually installed; cannot also be installed automatically.";
"oolite-oxzmanager-installable-version" = "Status: Incompatible with this version of Oolite.";
"oolite-oxzmanager-installable-noremote"= "Status: Installed but no longer available for download.";
"oolite-oxzmanager-installer-nonepicked" = "Select a pack and press return to install or upgrade it if possible. Packs in orange can be installed but will require other packs to be installed before they work, or conflict with a pack you have already installed. Press '[oolite_key_oxzmanager_showinfo]' to get more information on a selected pack.";
"oolite-oxzmanager-installed-nonepicked" = "Select a pack and press return to upgrade it if upgrades are available. Manually installed packs are not listed here. Press '[oolite_key_oxzmanager_showinfo]' to get more information on a selected pack, or '[oolite_key_oxzmanager_extract]' to extract it to your AddOns folder.";
"oolite-oxzmanager-remover-nonepicked" = "Select a pack and press return to remove it. If the pack is coloured blue it is no longer available for download and you will not be able to reinstall it if you remove it.";
"oolite-oxzmanager-text-prompt-@" = "New Filter = %@";
"oolite-oxzmanager-currentfilter-is-@" = "Current filter = %@";
"oolite-oxzmanager-currentfilter-is-@-@" = "Filter ('%@' sets): %@";
"oolite-oxzmanager-filterhelp" = "Enter a filter to restrict the expansion pack lists, or leave blank to keep the current filter. The following filters are available:\n\n'*' - show everything\n'i' - packs not already installed\n'u' - installed packs with updates available\n'k:<keyword>' - keyword search\n'a:<author>' - author search\n't:<tag>' - tag search\n'd:<integer>' - packs updated in last <integer> days\n\nThe filter entry will turn orange if the currently entered filter is invalid.";
"oolite-oxzmanager-infopage-title-@-version-@" = "Expansion Pack: %@ %@";
"oolite-oxzmanager-infopage-author-@" = "Author: %@";
"oolite-oxzmanager-infopage-license-@" = "License: %@";
"oolite-oxzmanager-infopage-tags-@" = "Tags: %@";
"oolite-oxzmanager-infopage-description-@" = "Description: %@";
"oolite-oxzmanager-infopage-infourl-@" = "URL: %@";
"oolite-oxzmanager-infopage-return" = "Press '[oolite_key_oxzmanager_showinfo]' again to return";
"oolite-oxzmanager-extract-info" = "Extracting an expansion pack installed through the manager will unzip it and place it into your AddOns folder. You do not need to do this to play Oolite with the pack - only if you want to look inside it or modify it.";
"oolite-oxzmanager-extract-releasebuild" = "If you want to modify or build your own expansions, the developer release of Oolite has several useful additional features.";
"oolite-oxzmanager-extract-@-already-exists" = "The extraction target %@ already exists - you have already extracted this pack. If you would like to extract it again, first delete or move the existing folder.";
"oolite-oxzmanager-extract-to-@" = "If you extract this pack, the folder %@ will be created, and the pack's contents will be extracted inside it. Renaming the folder to end in '.oxp' will let Oolite run it, though you will need to remove the managed version to avoid a conflict.\n\nPlease note that large packs may take a little while to extract - please be patient.";
"oolite-oxzmanager-extract-unavailable" = "Extraction unavailable";
"oolite-oxzmanager-extract-proceed" = "Extract now";
"oolite-oxzmanager-extract-cancel" = "Cancel extraction";
"oolite-oxzmanager-extract-log-no-original" = "The original managed expansion pack could not be found. Cancelling extraction.\n";
"oolite-oxzmanager-extract-log-bad-original" = "The original managed expansion pack could not be opened successfully. Cancelling extraction.\n";
"oolite-oxzmanager-extract-log-main-exists" = "The target folder already exists. Cancelling extraction.\n";
"oolite-oxzmanager-extract-log-main-unmakeable" = "The target folder could not be created - check your file and directory permissions. Cancelling extraction.\n";
"oolite-oxzmanager-extract-log-main-created" = "Created target folder and extracting files:\n";
"oolite-oxzmanager-extract-log-sub-failed" = "Extraction failed part way through. This may be caused by insufficient disk space to extract the pack, or other causes. The partial extraction is still in place if you wish to inspect it.";
"oolite-oxzmanager-extract-log-num-u-extracted" = "Extracted %u files successfully.\n";
"oolite-oxzmanager-extract-log-extracted-to-@" = "Extraction to %@ is now complete.\n";
// Loading screen (currently Mac only), also logged under start.progress
"loading-ships" = "Loading ship data";
"populating-space" = "Populating space";
@ -1037,6 +1388,7 @@
"status-commander-@" = "Commander %@";
"status-present-system" = "Present System:";
"status-hyperspace-system" = "Hyperspace System:";
"status-hyperspace-system-multi" = "[targetSystemName] (next: [nextHopSystemName])";
"status-condition" = "Condition:";
"status-fuel" = "Fuel:";
"status-light-years-desc" = "Light Years";
@ -1050,8 +1402,12 @@
"equipment-port-weapon-@" = "Port %@";
"equipment-pass-berth-@%0" = "1 Passenger Berth";
"equipment-pass-berth-@%1" = "%d Passenger Berths";
"equipment-@-not-available" = "%@ (N/A)";
"equipment-plural" = "[count] [equipmentName]s"; // plural form
"equipment-@-not-available" = "%@ (N/A)"; // all broken, only one installed
"equipment-plural-some-na" = "[okcount]/[count] [equipmentName]s"; // some broken, multiple installed
"manifest-cargo-quantity" = "[quantity] [units] × [commodityName]";
"manifest-cargo-quantity-extended" = "[quantity] [units] × [commodityName] ([containers] TC)";
// Short and Long Range Chart Overrides
"charts-distance" = "Distance: [distance|precision:1] Light Years";
@ -1072,6 +1428,11 @@
"long-range-chart-title-5" = "Galactic Chart 6";
"long-range-chart-title-6" = "Galactic Chart 7";
"long-range-chart-title-7" = "Galactic Chart 8";
/* Also possible for OXP use */
/* "long-range-chart-title-0-7" = "Near Lave"; */
"long-range-chart-distance" = "[charts-distance]";
"long-range-chart-est-travel-time" = "[charts-est-travel-time]";
"long-range-chart-find-planet-@" = "Find planet: %@";
@ -1085,12 +1446,43 @@
"price-column-title" = "Price:";
"for-sale-column-title" = "For sale:";
"in-hold-column-title" = "In hold:";
"oolite-legality-column-title" = "Legal:";
"oolite-extras-column-title" = "";
// "oolite-extras-column-title" = "Extra:"; // title for column is for OXPs
"oolite-legality-clear" = "—";
"oolite-legality-export" = "Ex"; // legal to export
"oolite-legality-import" = "Im"; // legal to import
"oolite-legality-neither" = "Re";
"market-cash-and-load" = "Cash: [credits|dcr]. Load [currentCargo] of [cargoCapacity] t.";
"cargo-tons-symbol" = "t";
"cargo-grams-symbol" = "g";
"cargo-kilograms-symbol" = "kg";
"commodity-quantity-none" = "—";
"oolite-market-filtered-all" = " Current filter hides all goods ";
"oolite-market-filter-line" = "Filter: [filterMode]";
"oolite-market-filter-0" = "All goods";
"oolite-market-filter-1" = "Carried or in stock";
"oolite-market-filter-2" = "Carried";
"oolite-market-filter-3" = "In stock";
"oolite-market-filter-4" = "No transport restrictions";
"oolite-market-filter-5" = "Transport restrictions";
"oolite-market-sorter-line" = "Sort: [sortMode]";
"oolite-market-sorter-0" = "Default";
"oolite-market-sorter-1" = "Alphabetical";
"oolite-market-sorter-2" = "Price";
"oolite-market-sorter-3" = "Quantity in stock";
"oolite-market-sorter-4" = "Quantity in hold";
"oolite-market-sorter-5" = "Unit mass";
"oolite-commodity-no-comment" = "No additional information available";
"oolite-commodity-no-short-comment" = "";
// "oolite-commodity-no-short-comment" = "—"; // blank for column is for OXPs
"oolite-commodity-info-return" = "Press '[oolite_key_market_info]' to return to commodity list";
"oolite-commodity-information-@" = "Commodity: %@";
"oolite-commodity-contracted-d-@" = "Total cargo contracts: %d %@";
"oolite-commodity-illegal" = "It is illegal to export this good from Cooperative stations.";
// System data screen
"sysdata-data-on-system" = "Data on [system]";
"sysdata-eco" = "Economy:";
@ -1098,7 +1490,8 @@
"sysdata-tl" = "Tech Level:";
"sysdata-tl-value" = "[techLevel|add:1]";
"sysdata-pop" = "Population:";
"sysdata-pop-value" = "[population|multiply:0.1|precision:1] Billion\n([inhabitants])";
"sysdata-pop-value" = "[sysdata-pop-value-short]\n([inhabitants])";
"sysdata-pop-value-short" = "[population|multiply:0.1|precision:1] Billion";
"sysdata-prod" = "Gross productivity:";
"sysdata-prod-value" = "[productivity] M₢";
"sysdata-radius" = "Average radius:";
@ -1110,6 +1503,7 @@
"options-save-commander" = " Save Commander ";
"options-load-commander" = " Load Commander ";
"options-begin-new-game" = " Begin New Game ";
"options-return-to-menu" = " End Game and Return to Menu ";
"options-game-options" = " Game Options… ";
"options-exit-game" = " Exit Game ";
"options-reset-to-unrestricted-play" = " Reset and enable OXPs ";
@ -1123,6 +1517,7 @@
"gameoptions-sound-volume-mute" = " Sound Volume: Mute ";
"gameoptions-volume-external-only" = " Sound Volume: External Control Only ";
"gameoptions-spoken-messages-yes" = " Spoken Messages: On ";
"gameoptions-spoken-messages-comms" = " Spoken Messages: Comms only ";
"gameoptions-spoken-messages-no" = " Spoken Messages: Off ";
"gameoptions-voice-name" = " Voice: [voiceName] ";
"gameoptions-voice-M" = " Gender: Male ";
@ -1137,21 +1532,27 @@
"gameoptions-wireframe-graphics-no" = " Wireframe Graphics: Off ";
"gameoptions-procedurally-textured-planets-yes" = " Detailed Planets: On ";
"gameoptions-procedurally-textured-planets-no" = " Detailed Planets: Off ";
"gameoptions-reduced-detail-yes" = " Reduced Detail: On ";
"gameoptions-detaillevel-0" = " Graphics Detail: Minimum Detail ";
"gameoptions-detaillevel-1" = " Graphics Detail: Normal Detail ";
"gameoptions-detaillevel-2" = " Graphics Detail: Shaders Enabled ";
"gameoptions-detaillevel-3" = " Graphics Detail: Extra Detail ";
// next eight no longer used
/* "gameoptions-reduced-detail-yes" = " Reduced Detail: On ";
"gameoptions-reduced-detail-no" = " Reduced Detail: Off ";
"gameoptions-shaderfx-not-available" = " Shader Effects: Not available ";
"gameoptions-shaderfx" = " Shader Effects: [shaderEffectsLevel] ";
"gameoptions-docking-clearance-yes" = " Docking Clearance Protocol: On ";
"gameoptions-docking-clearance-no" = " Docking Clearance Protocol: Off ";
"shaderfx-not-available" = "Not available";
"shaderfx-off" = "Off";
"shaderfx-simple" = "Simple";
"shaderfx-full" = "Full";
"shaderfx-full" = "Full"; */
"gameoptions-docking-clearance-yes" = " Docking Clearance Protocol: On ";
"gameoptions-docking-clearance-no" = " Docking Clearance Protocol: Off ";
// StickMapper screen
"stickmapper-roll" = "Roll";
"stickmapper-pitch" = "Pitch";
"stickmapper-yaw" = "Yaw";
"stickmapper-profile" = "Edit Axis Profiles";
"stickmapper-increase-thrust" = "Increase thrust";
"stickmapper-decrease-thrust" = "Decrease thrust";
"stickmapper-primary-weapon" = "Primary weapon";
@ -1175,10 +1576,27 @@
"stickmapper-view-starboard" = "View starboard";
"stickmapper-prime-equipment" = "Prime equipment";
"stickmapper-activate-equipment" = "Activate equipment";
"stickmapper-mode-equipment" = "Set equipment mode";
"stickmapper-fastactivate-a" = "Activate first fast equipment slot";
"stickmapper-fastactivate-b" = "Activate second fast equipment slot";
"stickmapper-escape-pod" = "Escape pod";
"stickmapper-cloak" = "Cloaking device";
"stickmapper-scanner-zoom" = "Scanner zoom";
"oolite-stickprofile-title" = "Joystick Profile";
"oolite-stickprofile-back" = "Back";
"oolite-stickprofile-axis" = "Axis:";
"oolite-stickprofile-deadzone" = "Deadzone:";
"oolite-stickprofile-profile-type" = "Profile Type:";
"oolite-stickprofile-type-standard" = "Standard";
"oolite-stickprofile-type-spline" = "Spline";
"oolite-stickprofile-range" = "Range:";
"oolite-stickprofile-sensitivity" = "Sensitivity:";
"oolite-stickprofile-spline-instructions" = "Click and Drag to set control points. Select and <Del> to delete points.";
"oolite-stickprofile-movement" = "Movement";
"oolite-stickprofile-response" = "Response";
"music-mode" =
(
"Off",
@ -1291,7 +1709,7 @@
"shipyard-price" = " Price [price|icr].";
// Load/Save screens shared information
"loadsavescreen-commander-name" = "Commander Name";
"loadsavescreen-commander-name" = "Commander";
"loadsavescreen-rating" = "Rating";
"loadsavescreen-no-commanders-found" = "No commanders found";
"loadsavescreen-commander-@-rated-@-has-@-legal-status-@-ship-@-location-@-g-@-timestamp-@" = "Commander %@ is rated %@ and has %@ in the bank. Legal status: %@. Ship: %@. Location: %@ (G%d). Timestamp: %@";
@ -1316,8 +1734,8 @@
// Save/Overwrite commander screens
"savescreen-title" = "Save Commander";
"savescreen-commander-name-@" = "Commander name: %@";
"savescreen-commander-name" = "Commander name: ";
"savescreen-commander-name-@" = "Save name: %@";
"savescreen-commander-name" = "Save name: ";
"overwrite-save-commander-@" = "Save Commander %@";
"overwritescreen-commander-@-already-exists-overwrite-query" = "A file named %@ already exists. Do you wish to overwrite it?";
"overwritescreen-yes" = " Overwrite ";
@ -1476,6 +1894,7 @@
);
// Commodity names
"oolite-unknown-commodity-name" = "Unknown Commodity";
"commodity-name food" = "Food";
"commodity-name textiles" = "Textiles";
"commodity-name radioactives" = "Radioactives";
@ -1523,8 +1942,9 @@
"speech-synthesis-incoming-message-@" = "[speech-synthesis-incoming-message]: %@";
// translations of special keys
"oolite-keycode-unset" = "(not set)";
"oolite-keycode-tab" = "Tab";
"oolite-keycode-esc" = "Escape";
"oolite-keycode-esc" = "Esc";
"oolite-keycode-space" = "Space";
"oolite-keycode-f1" = "F1";
"oolite-keycode-f2" = "F2";
@ -1537,16 +1957,26 @@
"oolite-keycode-f9" = "F9";
"oolite-keycode-f10" = "F10";
"oolite-keycode-f11" = "F11";
"oolite-keycode-right" = "Right Arrow";
"oolite-keycode-left" = "Left Arrow";
"oolite-keycode-down" = "Down Arrow";
"oolite-keycode-up" = "Up Arrow";
"oolite-keycode-right" = "Right";
"oolite-keycode-left" = "Left";
"oolite-keycode-down" = "Down";
"oolite-keycode-up" = "Up";
"oolite-keycode-home" = "Home";
"oolite-keycode-end" = "End";
"oolite-keycode-insert" = "Insert";
"oolite-keycode-delete" = "Delete";
"oolite-keycode-pageup" = "Page Up";
"oolite-keycode-pagedown" = "Page Down";
"oolite-keycode-numpad0" = "Numpad 0";
"oolite-keycode-numpad1" = "Numpad 1";
"oolite-keycode-numpad2" = "Numpad 2";
"oolite-keycode-numpad3" = "Numpad 3";
"oolite-keycode-numpad4" = "Numpad 4";
"oolite-keycode-numpad5" = "Numpad 5";
"oolite-keycode-numpad6" = "Numpad 6";
"oolite-keycode-numpad7" = "Numpad 7";
"oolite-keycode-numpad8" = "Numpad 8";
"oolite-keycode-numpad9" = "Numpad 9";
// Mac multi-screen handling

View File

@ -7,6 +7,7 @@
available_to_all = true;
condition_script = "oolite-conditions.js";
requires_non_full_fuel = true;
sort_order = 1; // always first
}
),
(
@ -45,6 +46,7 @@
"Wide cargo entrance and magnetic scoops enable in-flight capture of mined materials, fuel gasses from the solar corona, and salvage of space debris.",
{
condition_script = "oolite-conditions.js";
provides = ("EQ_CARGO_SCOOPS");
}
),
(
@ -65,6 +67,9 @@
{
condition_script = "oolite-conditions.js";
incompatible_with_equipment = "EQ_NAVAL_ENERGY_UNIT";
script_info = {
"oolite_energy_recharge_multiplier" = 1.8;
};
}
),
/* condition script blocks this one from appearing normally */
@ -74,6 +79,9 @@
"A special improved efficiency energy recharge unit, as supplied to Navy vessels.",
{
condition_script = "oolite-conditions.js";
script_info = {
"oolite_energy_recharge_multiplier" = 2.6;
};
}
/* Special case: this eq MUST STAY COMPATIBLE with EQ_ENERGY_UNIT - It's all handled properly in code.
Full details at http://developer.berlios.de/bugs/?func=detailbug&bug_id=13507&group_id=3577
@ -96,6 +104,23 @@
available_to_all = true;
}
),
(
3, 0, "Remove Laser",
"EQ_WEAPON_NONE",
"Remove laser weapon from selected mounting.",
{
condition_script = "oolite-conditions.js";
available_to_all = true;
weapon_info = {
range = 32000;
energy = 0.0;
damage = 0.0;
recharge_rate = 100.0;
shot_temperature = 0.0;
threat_assessment = -1.0;
};
}
),
(
3, 4000, "Pulse Laser",
"EQ_WEAPON_PULSE_LASER",
@ -103,6 +128,15 @@
{
condition_script = "oolite-conditions.js";
available_to_all = true;
weapon_info = {
range = 12500;
energy = 0.8;
damage = 15.0;
recharge_rate = 0.5;
shot_temperature = 7.0;
color = "redColor";
threat_assessment = 0.0;
};
}
),
(
@ -112,6 +146,16 @@
{
condition_script = "oolite-conditions.js";
available_to_all = true;
weapon_info = {
range = 15000;
energy = 0.5;
damage = 6.0;
recharge_rate = 0.1;
shot_temperature = 3.2;
color = "yellowColor";
threat_assessment = 0.5;
};
}
),
(
@ -121,6 +165,16 @@
{
condition_script = "oolite-conditions.js";
available_to_all = true;
weapon_info = {
range = 12500;
energy = 1.4;
damage = 50.0;
recharge_rate = 2.5;
shot_temperature = 10.0;
color = "blueColor";
is_mining_laser = 1;
threat_assessment = -0.5;
};
}
),
(
@ -130,6 +184,15 @@
{
condition_script = "oolite-conditions.js";
available_to_all = true;
weapon_info = {
range = 30000;
energy = 1.1;
damage = 12.0;
recharge_rate = 0.1;
shot_temperature = 4.25;
color = "magentaColor";
threat_assessment = 1.0;
};
}
),
/* condition script blocks this one from appearing normally */
@ -178,6 +241,7 @@
{
available_to_all = true;
available_to_NPCs = false;
can_carry_multiple = true;
condition_script = "oolite-conditions.js";
requires_cargo_space = 5;
damage_probability = 0;
@ -286,6 +350,16 @@
"Captured Thargoid weapon, self-aiming.",
{
available_to_player = false;
weapon_info = {
range = 17500;
energy = 1.1;
damage = 12.5;
recharge_rate = 1.0;
shot_temperature = 8.0;
color = "greenColor";
is_turret_laser = true;
threat_assessment = 1.0;
};
}
),
(
@ -307,6 +381,10 @@
"Shield boosting technology dramatically increases the capability of standard defensive shields.",
{
condition_script = "oolite-conditions.js";
script_info = {
"oolite_shield_increase" = 128;
"oolite_shield_recharge_multiplier" = 1.0;
};
}
),
(
@ -315,14 +393,18 @@
"Military technology, used in conjunction with ordinary shields and shield boosting technology, further increases the capability of standard defensive shields.",
{
condition_script = "oolite-conditions.js";
script_info = {
"oolite_shield_increase" = 128;
"oolite_shield_recharge_multiplier" = 1.5;
};
}
),
/* next item was a test item */
(
2, 2000, "Twin Plasma Cannon",
"EQ_WEAPON_TWIN_PLASMA_CANNON",
"Basic cannon delivering charged plasma bursts at sublight speed."
),
/* next item was a test item, no longer supported */
// (
// 2, 2000, "Twin Plasma Cannon",
// "EQ_WEAPON_TWIN_PLASMA_CANNON",
// "Basic cannon delivering charged plasma bursts at sublight speed."
// ),
/* new items */
(
4, 15000, "External Heat Shielding",
@ -331,6 +413,9 @@
{
available_to_all = true;
condition_script = "oolite-conditions.js";
script_info = {
"oolite_heat_insulation_strength" = 1.0;
};
}
),
(
@ -372,5 +457,19 @@
{
available_to_player = false;
}
),
/* condition script blocks this one from appearing normally */
(
100, 500000, "Tutorial Controls",
"EQ_OOLITE_TUTORIAL_CONTROLS",
"Tutorial Controls.",
{
condition_script = "oolite-conditions.js";
script = "oolite-tutorial-equipment.js";
available_to_all = true;
visible = false; // Hidden on status screen.
damage_probability = 0;
}
)
)

View File

@ -0,0 +1,50 @@
{
"oolite-default-ship-explosion" = {
"alpha" = 0.85;
"color_order" = "rgb";
"count" = 25;
"duration" = 1.5;
"growth_rate" = 1.5;
"size" = 2.5;
"texture" = "oolite-particle-cloud2.png";
};
"oolite-fragment-explosion" = {
"alpha" = 0.25;
"color_order" = "rgb";
"count" = 5;
"duration" = 1.2;
"growth_rate" = 14;
"size" = 1.0;
"texture" = "oolite-particle-fragments.png";
};
"oolite-fragment-explosion-b" = {
"alpha" = 0.25;
"color_order" = "rgb";
"count" = 5;
"duration" = 1.2;
"growth_rate" = 14;
"size" = 1.0;
"texture" = "oolite-particle-fragments2.png";
};
"oolite-default-asteroid-explosion" = {
"alpha" = 0.85;
"color_order" = "white";
"count" = 10;
"duration" = 1.2;
"growth_rate" = 1.6;
"size" = 1.6;
"texture" = "oolite-particle-cloud.png";
};
/* The game provides special explosion effects which cannot (yet)
* be redefined. */
// "oolite-builtin-flash"
// "oolite-builtin-slowcloud"
// "oolite-builtin-fastspark"
}

View File

@ -0,0 +1,28 @@
{
/* General settings which don't belong in other plists. Many of them
* used to be miscellaneous entries in planetinfo.plist */
// Uncomment the desired behaviour for galactic hyperspace exit. Fixed coordinates will put the arrival
// of an intergalactic jump on map coordinates specified by the key galactic_hyperspace_fixed_coords.
"galactic_hyperspace_behaviour" = "BEHAVIOUR_STANDARD";
//"BEHAVIOUR_ALL_SYSTEMS_REACHABLE";
//"BEHAVIOUR_FIXED_COORDINATES";
// When using BEHAVIOUR_FIXED_COORDINATES, the key below is used to specify the
// actual fixed coordinates for the intergalactic jump.
"galactic_hyperspace_fixed_coords" = "96 96";
hyperspace_tunnel_color_1 = (1.0, 1.0, 1.0, 0.7); // R, G, B, A values 0.0 to 1.0
//hyperspace_tunnel_color_1 = (1.0, 0.0, 0.0, 0.5); // fallback value, same as docking tunnel
//hyperspace_tunnel_color_2 = (0.0, 0.0, 1.0, 0.25); // fallback value, same as docking tunnel
/* This setting controls the minimum charge level of the energy banks
before the shields start charging. It's taken as a percentage value
from 0.0 (0%) to 1.0 (100%). If the energy banks are less than this,
energy is first used to charge the banks, and only then the shields.
Default: 0.0
*/
//shield_charge_energybank_threshold = 0.75;
}

View File

@ -9,6 +9,10 @@
above. Default: "SHADERS_FULL". If set to
"SHADERS_OFF", shaders are treated as not
available.
Note that from 1.79 onwards SHADERS_SIMPLE
is treated as SHADERS_OFF
smooth_points Enable or disable use of point smoothing.
Default: true.
smooth_lines Enable or disable use of line smoothing.
@ -80,6 +84,24 @@
smooth_points = false; // Point smoothing is not supported in hardware.
use_dust_shader = false; // Vertex shaders are emulated on CPU.
};
"Intel GMA 3100 family" =
{
match =
{
vendor = "Tungsten|Intel";
/* e.g. "Mesa DRI Intel(R) G33" - as above entry, mesa
* drivers use chipset number
*/
renderer = "(Intel|GMA).*\\bG?3[13](\\b|$)";
};
maximum_shader_level = "SHADERS_SIMPLE";
default_shader_level = "SHADERS_SIMPLE";
smooth_points = false; // Point smoothing is not supported in hardware.
use_dust_shader = false; // Vertex shaders are emulated on CPU.
};
"ATI R300 family" =
{

View File

@ -0,0 +1,251 @@
{
/* Graphical User Interface settings. There's not a lot here yet,
* but more will be added gradually. The GUI setup doesn't make it
* practical to add everything at once, or even sometimes add
* broad default settings. To make overriding of group defaults
* easier for OXPs, most of the values here are commented out
* rather than explicitly set to the default. */
/* overrides of this will not necessarily be consistent yet. Most
* things below specified as 'yellowColor' actually use the
* default colour if no colour is specified.
*
* TODO: remove explicit sets of yellow which actually mean 'default' */
// "default_text_color" = "yellowColor";
/* the screen title colour */
// "screen_title_color" = "redColor";
/* the screen divider colour */
// "screen_divider_color" = "0.75 0.75 0.75";
/* the selected row background colour */
// "selected_row_background_color" = "redColor";
/* the selected row text colour */
// "selected_row_color" = "blackColor";
/* the text input cursor colour */
// "text_input_cursor_color" = "redColor";
/* Equipment cash row colour */
// "equipment_cash_color" = "yellowColor";
/* Equipment unavailable colour */
// "equipment_unavailable_color" = "greenColor";
/* Equipment scroll colour */
// "equipment_scroll_color" = "greenColor";
/* Equipment option colour */
// "equipment_option_color" = "yellowColor";
/* Equipment repair colour, also for renovation */
// "equipment_repair_color" = "orangeColor";
/* Equipment description colour */
// "equipment_description_color" = "greenColor";
/* Laser mount selection colour */
// "equipment_laser_color" = "greenColor";
/* Laser mount already fitted selection colour */
// "equipment_laser_fitted_color" = "0.0 0.6 0.0";
/* Tab settings for equip ship screen */
// "equipment_tabs" = (0,-360,-480)
/* Interfaces heading colour */
// "interface_heading_color" = "yellowColor";
/* Interfaces scroll colour */
// "interface_scroll_color" = "greenColor";
/* Interfaces entry colour */
// "interface_entry_color" = "yellowColor";
/* Interfaces entry description colour */
// "interface_description_color" = "greenColor";
/* Interfaces none available message colour */
// "interface_none_color" = "greenColor";
/* Interfaces tab settings */
// "interface_tabs" = (0,-480);
/* Shipyard screen column headings */
// "shipyard_heading_color" = "greenColor";
/* Shipyard screen scroll text */
// "shipyard_scroll_color" = "greenColor";
/* Shipyard screen entries */
// "shipyard_entry_color" = "yellowColor";
/* Shipyard screen no ships message */
// "shipyard_noship_color" = "greenColor";
/* Shipyard screen trade in information */
// "shipyard_tradein_color" = "yellowColor";
/* Shipyard screen ship descriptions */
// "shipyard_description_color" = "greenColor";
/* Shipyard screen tabs */
// "shipyard_tabs" = (0,-258,270,370,450);
/* the ship name on the F5 screen */
// "status_shipname_color" = "yellowColor";
/* the status items on the F5 screen */
// "status_data_color" = "yellowColor";
/* the equipment list heading on the F5 screen */
// "status_equipment_heading_color" = "yellowColor";
/* the colour of the scroll forward/back controls on the equipment list */
// "status_equipment_scroll_color" = "greenColor";
/* the colour of ok equipment */
// "status_equipment_ok_color" = "yellowColor";
/* the colour of damaged equipment */
// "status_equipment_damaged_color" = "orangeColor";
/* the tab spacing on the status page */
// "status_tabs" = (20,160,290);
/* status screen sort damaged equipment first */
// "status_prioritise_damaged" = 1;
/* the colour of sub-headings on the manifest page */
// "manifest_subhead_color" = "greenColor";
/* the colour of entries on the manifest page */
// "manifest_entry_color" = "yellowColor";
/* the colour of back/next controls on the manifest page */
// "manifest_scroll_color" = "greenColor";
/* the colour of disabled back/next controls on the manifest page */
// "manifest_no_scroll_color" = "darkGrayColor";
/* the tab stops for the manifest (cargo display) */
// "manifest_tabs" = (20,256);
/* scale of name labels on F6 chart relative to Oolite default size */
// "chart_label_scale" = 1.0;
/* scale of star circles on F6 chart relative to the 'radius' property */
// "chart_circle_scale" = 0.0017;
/* color of name labels on F6 chart */
// "chart_label_color" = "yellowColor";
/* color of fuel range circle */
// "chart_range_color" = "greenColor";
/* color of location crosshair */
// "chart_crosshair_color" = "greenColor";
/* color of fuel range circle */
// "chart_cursor_color" = "redColor";
/* color of matched system box when name searching */
// "chart_match_color" = "greenColor";
/* color of matched system label when name searching - if multiple
* matches, this is the currently selected one and the others will
* be in chart_match_color */
// "chart_match_label_color" = "cyanColor";
/* color of connecting lines on nav array */
// "chart_connection_color" = "0.25 0.25 0.25";
/* color of shortest route on nav array */
// "chart_route_short_color" = "yellowColor";
/* color of quickest route on nav array */
// "chart_route_quick_color" = "cyanColor";
/* colors of economy icons on chart */
// "chart_economy_0_color" = "1.0 1.0 0.0"; // Rich Ind
// "chart_economy_1_color" = "0.875 1.0 0.0";
// "chart_economy_2_color" = "0.75 1.0 0.0";
// "chart_economy_3_color" = "0.625 1.0 0.0";
// "chart_economy_4_color" = "0.5 1.0 0.0";
// "chart_economy_5_color" = "0.375 1.0 0.0";
// "chart_economy_6_color" = "0.25 1.0 0.0";
// "chart_economy_7_color" = "0.125 1.0 0.0"; // Poor Ag
/* colors of government icons on chart */
// "chart_government_0_color" = "0.5 0.0 0.7"; // Anarchy
// "chart_government_1_color" = "0.7 0.5 0.3";
// "chart_government_2_color" = "0.0 1.0 0.3";
// "chart_government_3_color" = "1.0 0.8 0.1";
// "chart_government_4_color" = "1.0 0.0 0.0";
// "chart_government_5_color" = "0.1 0.5 1.0";
// "chart_government_6_color" = "0.7 0.7 0.7";
// "chart_government_7_color" = "0.7 1.0 1.0"; // Corp State
/* colors of tech level numbers on chart */
// "chart_tech_color" = "0.5 1.0 1.0";
/* tab stops for chart travel time text line */
// "chart_traveltime_tabs" = (0,96,288);
/* colour of system data facts lines */
// "systemdata_facts_color" = "yellowColor";
/* colour of system data description lines */
// "systemdata_description_color" = "greenColor";
/* tab stops for system data screen */
// "systemdata_tabs" = (0,96,144);
/* colour for market screen column headings */
// "market_heading_color" = "greenColor";
/* colour for market screen commodity lines */
// "market_commodity_color" = "yellowColor";
/* colour for market screen scroll indicators */
// "market_scroll_color" = "greenColor";
/* colour for market screen 'all goods filtered' message */
// "market_filtered_all_color" = "yellowColor";
/* colour for market screen filter/sort status*/
// "market_filter_info_color" = "greenColor";
/* colour for market screen cash/hold status*/
// "market_cash_color" = "yellowColor";
/* colour for market carrying contract status*/
// "market_contracted_color" = "yellowColor";
/* colour for market good description text */
// "market_description_color" = "yellowColor";
/* tab stops for market screen */
// "market_tabs" = (0,137,187,267,321,431);
/* docking report screen report colour */
// "docking_report_color" = "yellowColor";
/* docking report screen cash/cargo summary colour */
// "docking_summary_color" = "yellowColor";
/* docking report screen continue colour */
// "docking_continue_color" = "yellowColor";
}

View File

@ -49,11 +49,19 @@
x = -112;
y = -164;
},
{ // stick sensitivity indicator
alpha = 1.0;
selector = "drawStickSensitivityIndicator:";
x = -116;
y = -184;
height = 8;
width = 8;
},
{ /* status indicator light, x and y give the location, the size defines the icon size */
height = 8;
selector = "drawStatusLight:";
width = 8;
x = -116;
x = -106;
y = -184;
},
{ /* ship's clock, x and y give the location, the size defines the character size */
@ -115,9 +123,10 @@
x = -152;
y = -187;
},
{ /* just draws a surround 2 units around the selected size, you could also use drawGreenSurround: */
{ /* just draws a surround 2 units around the selected size */
height = 40;
selector = "drawYellowSurround:";
selector = "drawSurround:";
color = "yellowColor";
width = 48;
x = -152;
y = -216;
@ -129,6 +138,15 @@
x = -152;
y = -201;
},
// not enabled in default HUD - uncomment to use
// { /* witchspace destination label */
// selector = "drawWitchspaceDestination:";
// height = 10;
// width = 10;
// y = -207;
// x = -176;
// color = (0.25,0.25,1.0,1.0);
// },
{ /* cabin temperature bar */
height = 8;
selector = "drawCabinTempBar:";
@ -195,42 +213,48 @@
},
{
text = "Roll";
x = -192;
align = 1;
x = -181;
y = -180;
height = 8;
width = 8;
},
{
text = "Pitch";
x = -196;
align = 1;
x = -181;
y = -192;
height = 8;
width = 8;
},
{
text = "FUEL";
x = -197;
align = 1;
x = -181;
y = -206;
height = 8;
width = 8;
},
{
text = "CT";
x = -189;
align = 1;
x = -181;
y = -216;
height = 8;
width = 8;
},
{
text = "LT";
x = -188;
align = 1;
x = -181;
y = -226;
height = 8;
width = 8;
},
{
text = "ALT";
x = -193;
align = 1;
x = -181;
y = -236;
height = 8;
width = 8;
@ -281,4 +305,6 @@
overall_alpha = 0.75;
reticle_target_sensitive = no;
cloak_indicator_on_status_light = yes;
scanner_non_linear = no;
scanner_ultra_zoom = no;
}

View File

@ -26,18 +26,19 @@
{ // scanner zoom indicator
alpha = 1.0;
selector = "drawScannerZoomIndicator:";
x = 108;
y = 32;
x = 100;
y = 36;
y_origin = -1;
},
//{ // stick sensitivity indicator
// alpha = 1.0;
// selector = "drawStickSensitivityIndicator:";
// x = 151;
// y = -165;
// height = 12;
// width = 12;
//},
{ // stick sensitivity indicator
alpha = 1.0;
selector = "drawStickSensitivityIndicator:";
x = 150;
y = 75;
y_origin = -1;
height = 12;
width = 12;
},
{ // compass
alpha = 1.0;
selector = "drawCompass:";
@ -124,9 +125,10 @@
y = 78;
y_origin = -1;
},
{ // just draws a surround 2 units around the selected size, you could also use drawGreenSurround:
{ // just draws a surround 2 units around the selected size
height = 40;
selector = "drawYellowSurround:";
color = "yellowColor";
selector = "drawSurround:";
width = 80;
x = -200;
y = 46;
@ -140,6 +142,16 @@
y = 61;
y_origin = -1;
},
// not enabled in default HUD - uncomment to use
// { // witchspace destination label
// selector = "drawWitchspaceDestination:";
// height = 10;
// width = 10;
// y = 55;
// x = -240;
// y_origin = -1;
// color = (0.25,0.25,1.0,1.0);
// },
{ // cabin temperature bar
height = 8;
selector = "drawCabinTempBar:";
@ -185,7 +197,7 @@
height = 12;
selector = "drawClock:";
width = 12;
x = -48;
x = -41;
y = 18;
y_origin = -1;
},
@ -228,90 +240,108 @@
(
{ // LHS
text = "FWD";
x = -264;
y = 82;
align = 1;
x = -245;
y = 86;
y_origin = -1;
height = 20;
width = 10;
height = 12;
width = 12;
with_dial = "drawForwardShieldBar:";
},
{ text = "AFT";
x = -262;
y = 66;
align = 1;
x = -245;
y = 70;
y_origin = -1;
height = 20;
width = 10;
height = 12;
width = 12;
with_dial = "drawAftShieldBar:";
},
{
text = "FUEL";
x = -264;
y = 52;
align = 1;
x = -245;
y = 55;
y_origin = -1;
height = 14;
width = 9;
height = 10;
width = 10;
with_dial = "drawFuelBar:";
},
{
text = "CT";
x = -255;
y = 42;
align = 1;
x = -245;
y = 45;
y_origin = -1;
height = 14;
width = 9;
height = 10;
width = 10;
with_dial = "drawCabinTempBar:";
},
{
text = "LT";
x = -254;
y = 32;
align = 1;
x = -245;
y = 34;
y_origin = -1;
height = 14;
width = 9;
height = 10;
width = 10;
with_dial = "drawWeaponTempBar:";
},
{
text = "ALT";
x = -260;
y = 22;
align = 1;
x = -245;
y = 24;
y_origin = -1;
height = 14;
width = 9;
height = 10;
width = 10;
with_dial = "drawAltitudeBar:";
},
{
text = "MISS";
x = -266;
y = 4;
align = 1;
x = -245;
y = 3;
y_origin = -1;
height = 16;
width = 10;
height = 14;
width = 14;
with_dial = "drawMissileDisplay:";
},
{ // RHS
text = "SPD";
x = 241;
y = 82;
x = 242;
y = 86;
y_origin = -1;
height = 20;
width = 10;
height = 14;
width = 14;
with_dial = "drawSpeedBar:";
},
{
text = "ROLL";
x = 241;
x = 242;
y = 72;
y_origin = -1;
height = 12;
width = 9;
width = 12;
with_dial = "drawRollBar:";
},
//{ // yaw bar legend, disabled by default
// // uncomment as required to enable
// text = "YAW";
// x = 241;
// x = 242;
// y = -138;
// height = 12;
// width = 9;
// width = 12;
// with_dial = "drawYawBar:";
//},
{
text = "PITCH";
x = 241;
x = 242;
y = 62;
y_origin = -1;
height = 12;
width = 9;
width = 12;
with_dial = "drawPitchBar:";
}
);
multi_function_displays = (
@ -351,4 +381,6 @@
overall_alpha = 0.75;
reticle_target_sensitive = no;
cloak_indicator_on_status_light = yes;
scanner_non_linear = no;
scanner_ultra_zoom = no;
}

View File

@ -1,5 +0,0 @@
{
Firearms = 1;
Narcotics = 2;
Slaves = 1;
}

View File

@ -21,6 +21,13 @@
key_gui_arrow_up = 255;
key_gui_arrow_down = 254;
/* // alternative settings to use numpad instead
key_gui_arrow_left = 314; //numpad 4
key_gui_arrow_right = 316; //numpad 6
key_gui_arrow_up = 318; //numpad 8
key_gui_arrow_down = 312; //numpad 2
*/
key_increase_speed = "w";
key_decrease_speed = "s";
key_inject_fuel = "i";
@ -53,7 +60,7 @@
key_hyperspace = "h";
key_jumpdrive = "j";
key_dump_cargo = "d";
key_dump_cargo = "D";
key_rotate_cargo = "R";
key_autopilot = "c";
@ -85,6 +92,9 @@
// key_contract_info = "?"; // old name works for compatibility
key_chart_highlight = "?";
key_market_filter_cycle = "?";
key_market_sorter_cycle = "/";
key_cycle_mfd = ";";
key_switch_mfd = ":";
@ -94,4 +104,9 @@
key_custom_view = "v";
key_dump_target_state = "H";
key_oxzmanager_setfilter = "f";
key_oxzmanager_showinfo = "i";
key_oxzmanager_extract = "x";
}

View File

@ -195,7 +195,8 @@
missile.damage.calc = no; // Debugging of missile damage curves
missile.tidying.debug = no;
oxp.conflict = $error;
oxp.duplicate = $error;
@ -203,6 +204,9 @@
oxp.requirementMissing = $error;
oxp.versionMismatch = $error;
oxz.manager.error = $error;
oxz.manager.debug = no;
player.ship = no;
player.ship.damage = no;
player.equipmentScript = $scriptDebugOn;
@ -223,15 +227,17 @@
rendering.reset = yes;
rendering.reset.start = inherit;
rendering.reset.end = no;
resourceManager.error = yes;
resourceManager.foundFile = no; // Tells you where all assets (models, textures, sounds) are found. Very verbose!
resourceManager.planetinfo = no;
save.failed = $error;
save.success = no;
quickSave.failed = $error;
load.failed = $error;
load.progress = no;
setup.ship.badEntry.subentities = inherit;
@ -290,6 +296,7 @@
script.javaScript.init.success = no;
script.javaScript.init.error = $error; // Fatal start-up error
script.javaScript.timeLimit = yes; // Script ran for too long and has been killed.
script.javaScript.timeLimit.debug = no; // Time limiter debugging info
script.javaScript.willLoad = no;
script.load = no;
@ -318,7 +325,7 @@
searchPaths.dumpAll = $troubleShootingDump;
searchPaths.debug = no;
$shaderDebug = $shaderDebugOn;
$shaderError = $error;

View File

@ -40,14 +40,14 @@
{
IS_OOLITE = 1;
OOSTD_DIFFUSE_MAP = 1;
OOSTD_NORMAL_AND_SPECULAR_MAP = "!OO_REDUCED_COMPLEXITY";
OOSTD_NORMAL_AND_SPECULAR_MAP = 1;
OOSTD_CUBE_MAP = 0;
};
"moon-dynamic-macros" =
{
IS_OOLITE = 1;
OOSTD_DIFFUSE_MAP = 1;
OOSTD_NORMAL_AND_SPECULAR_MAP = "!OO_REDUCED_COMPLEXITY";
OOSTD_NORMAL_AND_SPECULAR_MAP = 1;
OOSTD_CUBE_MAP = 0;
OOSTD_HARSH_MISTRESS = 1;
};
@ -64,4 +64,17 @@
OOSTD_CUBE_MAP = 0;
OOSTD_HARSH_MISTRESS = 1;
};
"planet-customized-cubemap-macros" =
{
IS_OOLITE = 1;
OOSTD_DIFFUSE_MAP = 1;
OOSTD_CUBE_MAP = 1;
};
"moon-customized-cubemap-macros" =
{
IS_OOLITE = 1;
OOSTD_DIFFUSE_MAP = 1;
OOSTD_CUBE_MAP = 1;
OOSTD_HARSH_MISTRESS = 1;
};
}

View File

@ -167,7 +167,7 @@
"oolite-registership-instructions-part2" = "Please enter your ship's new name. Registering a name here is important to distinguish your ship from others of the same type.\n\nFor example, if you enter 'Pride of %H' here, your ship will be registered as '[commander_shipname]: Pride of %H'\n\nYour ship is currently registered as '[commander_shipdisplayname]'. To keep this name, press 'Enter' now.";
"oolite-registership-title-part3" = "Thank you for completing registration";
"oolite-registership-instructions-part3" = "Thank you. Your selected personal name and new ship name have been recorded, and will be transmitted to public ship registries in the next daily feed.\n\nIf at any point you wish to change either your own name or that of your ship, you may do so by docking at any Galactice Cooperative station, returning to this interface and entering the new data.";
"oolite-registership-instructions-part3" = "Thank you. Your selected personal name and new ship name have been recorded, and will be transmitted to public ship registries in the next daily feed.\n\nIf at any point you wish to change either your own name or that of your ship, you may do so by docking at any Galactic Cooperative station, returning to this interface and entering the new data.";
// primable equipment management
"oolite-primablemanager-interface-title" = "Manage primable equipment";
@ -183,4 +183,307 @@
"oolite-primablemanager-completed" = "Equipment configuration is complete.\n\nFirst fast activation (defensive):\n [oolite-primable-a]\n\nSecond fast activation (offensive):\n [oolite-primable-b]";
// tutorial
"oolite-tutorial-no-witchspace" = "Witchspace controls are not available in this simulator.";
"oolite-tutorial-no-torus" = "The torus drive is not available during this lesson.";
"oolite-tutorial-no-death" = "If this wasn't a simulator, that would have killed you. Be more careful this time!";
"oolite-tutorial-no-advance" = "Advancing with '[oolite_key_activate_equipment]' is not currently available.";
"oolite-tutorial-controls-mode0" = "Mode: next stage in lesson";
"oolite-tutorial-controls-mode1" = "Mode: next lesson";
"oolite-tutorial-controls-mode2" = "Mode: restart lesson";
"oolite-tutorial-0-0-title" = "Flight Training Course";
"oolite-tutorial-0-0-message" = "Welcome to the Cooperative Flight Training Course, pilot. This course will demonstrate the basic functionality of Cooperative ships to you, in a specially-prepared simulator.\n\nThe course is in multiple lessons. While in the simulator, you can usually use the '[oolite_key_activate_equipment]' key to advance to the next entry in the current lesson once you have finished reading the instructions. Occasionally this will not work, as you will be expected to demonstrate what you have just learned.\n\nUsing the '[oolite_key_mode_equipment]' key will temporarily change the functionality of the '[oolite_key_activate_equipment]' key, and allow you to skip lessons you have previously completed, or restart the current lessons.\n\nOnce the simulation begins, a panel on your screen will display instructions, which you should follow to progress through the course. If you wish to temporarily hide the panel, press the '[oolite_key_cycle_mfd]' key. You can bring it back with the same key, or it will automatically reappear when there are new instructions.\n\nWhere an instruction asks you to press a letter key, press the letter key alone if it is lower case (e.g. 'i'), and press shift and the key together if it is upper case (e.g. 'K').\n\nWhen you are ready, press the Enter key to begin the simulation with the first lesson.";
"oolite-tutorial-0-0-choices" = { "1" = "Begin Course"; };
"oolite-tutorial-0-2" = "Welcome to the pilot's training course. The lesson information will be displayed on this panel.\n\nYou will often need to press '[oolite_key_activate_equipment]' to go to the next step - do this now to start the first lesson.\n\nRemember, you can also press '[oolite_key_mode_equipment]' to skip or restart lessons.";
"oolite-tutorial-1-0" = "Lesson 1: the HUD\nThis lesson introduces the Head-Up Display (HUD) components in turn.\nWhen you start, the HUD components will all be hidden. As you go through this lesson, they will be made visible and introduced.";
"oolite-tutorial-1-1" = "Energy banks: 1/3\nThe energy bank gauge shows the stored energy in your ship's capacitors, which are used to power various high-energy systems.\nThey are continually recharged from your ship's power plant, but intensive activity will drain them faster than they can be charged.";
"oolite-tutorial-1-2" = "Energy banks: 2/3\nA crucial system powered by the banks is the emergency hull shield. This will protect your ship and most of its systems from high-energy impact. If your energy banks are too empty to power this shield, this may be fatal.";
"oolite-tutorial-1-3" = "Energy banks: 3/3\nIf your energy banks are low, the gauge will change colour to alert you. Watch how long it takes to recharge from nearly empty, and avoid placing too much strain on the banks.";
"oolite-tutorial-1-4" = "Primary Shields: 1/3\nTo protect your ship further from high energy impacts it is fitted with two shield generators. A pre-charged shield is much more reliable than the emergency hull shield.\nOne generator protects your forward arc...\n";
"oolite-tutorial-1-5" = "Primary Shields: 2/3\n...while the other protects your aft.\nThe charge levels are independent, so try to take impacts on the stronger shield.";
"oolite-tutorial-1-6" = "Primary Shields: 3/3\nThe shields will slowly recharge from the energy banks if they are drained, and the bars will change colour to highlight a drained state. As with the energy banks, a full recharge will take some time.";
"oolite-tutorial-1-7" = "Fuel: 1/2\nThis bar shows the amount of witchspace fuel currently available. The full capacity is sufficient for a seven light-year witchspace intersystem jump. With the optional Fuel Injectors upgrade fitted, fuel can also be used to significantly boost your speed in normal space.";
"oolite-tutorial-1-8" = "Fuel: 2/2\nThe vertical line shows the amount of fuel needed to reach the currently selected witchspace destination. If the fuel is insufficient, this will change colour.";
"oolite-tutorial-1-9" = "Cabin Temperature: 1/2\nIn normal flight, your ship will maintain a steady-state temperature, with waste heat gradually being radiated into space. If you are near a hot object such as a star, or travelling quickly through a planet's upper atmosphere, the temperature will rise.";
"oolite-tutorial-1-10" = "Cabin Temperature: 2/2\nAt extremely high temperatures your life support systems will fail. Emergency loops will drain power from your shields and energy banks to buy a few more seconds, but you should have got out long before then.";
"oolite-tutorial-1-11" = "Laser Temperature: 1/2\nFiring your laser generates a significant amount of waste heat. Coolant pumps will diffuse it harmlessly through the much greater mass of your ship, but most types of laser generate heat far faster than the pumps can remove it.";
"oolite-tutorial-1-12" = "Laser Temperature: 2/2\nHold the '[oolite_key_fire_lasers]' key to fire your laser for a while, and note the temperature slowly rises. More powerful lasers generate a much larger volume of waste heat. At high temperatures, your laser will automatically cut out to prevent meltdown.";
"oolite-tutorial-1-13" = "Altitude:\nThis bar shows your height above the nearest major body - a star, planet or moon. Your ship is neither authorised nor equipped for planetary approach. As long as you remain in the upper atmosphere or higher - some bar still showing - you will be safe.";
"oolite-tutorial-1-14" = "Speed:\nThis bar shows your flight speed as a proportion of the maximum speed generated by your ship's inertialess drive. Use the '[oolite_key_increase_speed]' and '[oolite_key_decrease_speed]' keys to speed up and slow down.";
"oolite-tutorial-1-15" = "Roll:\nYour ship's rate of roll is indicated by this dial. Use the '[oolite_key_roll_left]' and '[oolite_key_roll_right]' keys to turn.";
"oolite-tutorial-1-16" = "Pitch:\nYour ship's rate of pitch is indicated by this dial. Use the '[oolite_key_pitch_forward]' and '[oolite_key_pitch_back]' keys to turn in this axis.\nNotice that the dial is relative to your ship's maximum turn rate in the axis. Almost all ships can roll faster than they can pitch.";
"oolite-tutorial-1-17" = "Pylon Status:\nThe icons here show the missiles, mines and other deployable equipment attached to your external pylons. Currently your ship has three standard missiles fitted. Other types of pylon-mounted item have different icons.";
"oolite-tutorial-1-18" = "Scanner:\nThe scanner is perhaps the most important part of your HUD, and using it to locate and identify nearby objects will be the subject of the next lesson.";
"oolite-tutorial-1-19" = "Compass:\nThe compass is used to locate more distant objects outside scanner range. The basic model is used to detect the system's major planet, which appears as a circle on the compass. If the circle is green, the planet is in front of you. Otherwise, it is behind you. Use of the compass for navigation will be covered in a later lesson.";
"oolite-tutorial-1-20" = "Status light: 1/2\nThe status light summarises the local situation. If it is green, as now, there are no large or powered objects nearby. Yellow, which is most common, indicates that there are nearby large or powered objects, and care should be taken while flying.";
"oolite-tutorial-1-21" = "Status light: 2/2\nA red status light indicates that something nearby presents a direct danger to your ship. An alarm will sound to indicate a change to this status.";
"oolite-tutorial-1-22" = "Clock: 1/2\nThe clock shows the current galactic standard time. The first seven digit number is the count of standard days since the start of the calendar. The remaining digits are the time on that standard day. For historical reasons, the standard day does not correspond exactly to that of any Cooperative planet, though it is close to many.";
"oolite-tutorial-1-23" = "Clock: 2/2\nIf the clock becomes unsynchronised with standard time, it will display 'adjusting' while it resynchronises. This is normal after witchspace jumps and when restarting the system after maintenance.";
"oolite-tutorial-1-24" = "This concludes the introduction to the HUD. There are a few additional HUD indicators which depend either on particular equipment or special circumstances, and these will be described in later lessons.";
"oolite-tutorial-2-0" = "Lesson 2: Using the Scanner\nThis lesson introduces use of the scanner for navigation and identification, and the basic flight controls used in space.\n\nStart by bringing your ship to a complete stop using the '[oolite_key_decrease_speed]' key, then press '[oolite_key_activate_equipment]' to start the lesson.";
"oolite-tutorial-2-1-error" = "First bring your ship to a complete stop using the '[oolite_key_decrease_speed]' key.";
"oolite-tutorial-2-1" = "Scanner use: 1/9\nWe have added several asteroids around you, which appear on your scanner as a white marker.\nThe circle of the scanner represents the horizontal plane around your ship, with the diagonal lines approximately indicating your field of view. Maximum range is just over 25km.";
"oolite-tutorial-2-2" = "Scanner use: 2/9\nThe position of an object above or below the plane is then marked with a stick. The further the object is from the plane, the longer the stick will be.";
"oolite-tutorial-2-3" = "Scanner use: 3/9\nTo bring an object on the scanner into your forward view, first roll your ship with the '[oolite_key_roll_left]' and '[oolite_key_roll_right]' keys until the object is on the forward/back line of the scanner. Then, use the '[oolite_key_pitch_forward]' and '[oolite_key_pitch_back]' keys to turn your ship so that it is in front of you.";
"oolite-tutorial-2-4" = "Scanner use: 4/9\nThe scanner can detect objects up to a substantial distance. Pick one of the asteroids and fly towards it. Accelerate with the '[oolite_key_increase_speed]' key, and decelerate again when nearby with the '[oolite_key_decrease_speed]' key.\nBe careful not to collide with it!";
"oolite-tutorial-2-5" = "Scanner use: 5/9\nWhen concentrating on close-up objects, it may be useful to zoom the scanner, sacrificing range for detail. Press the '[oolite_key_scanner_zoom]' key to zoom in, up to 5x zoom.\nYou can reset the zoom to maximum range using the '[oolite_key_scanner_unzoom]' key. Note the zoom level indicator by the scanner.";
"oolite-tutorial-2-6" = "Scanner use: 6/9\nThe horizontal lines on the scanner mark out range. The major lines are 5km apart, and as you zoom the scanner in, minor lines 1km apart will also be added.";
"oolite-tutorial-2-7" = "Scanner use: 7/9\nThe colour of the marker is used to indicate something about its nature. Asteroids are unpowered objects and appear white. Other objects which will appear white include debris, cargo containers, and escape capsules";
"oolite-tutorial-2-8" = "Scanner use: 8/9\nPowered ships usually appear yellow on the scanner, unless they are attacking, when they appear red. Don't worry - this one isn't actually attacking!\nPolice and other official ships are indicated with a purple marker - be careful not to accidentally hit them as this is an illegal act.";
"oolite-tutorial-2-9" = "Scanner use: 9/9\nOther common colours include yellow/green flashing for navigation buoys, light blue for missiles, and red/yellow flashing for mines. Again, don't worry, these are all disarmed!";
"oolite-tutorial-2-10" = "View controls: 1/2\nYour ship is fitted with four view cameras. Use the '[oolite_key_view_forward]', '[oolite_key_view_aft]', '[oolite_key_view_port]' and '[oolite_key_view_starboard]' keys to switch between them. The view lines on the scanner will move as you do. Notice that the crosshair is replaced on the other views, as you have no other weapons mounted.";
"oolite-tutorial-2-11" = "View controls: 2/2\nYour ship can also simulate an external view for you. Press '[oolite_key_custom_view]' to switch to external view mode and to cycle through the available external views. Any of the internal view keys will return you to internal viewing.";
"oolite-tutorial-3-0" = "Lesson 3: Flight Training\nThis lesson gives you opportunity to practice basic piloting skills. Your ship has been disarmed temporarily to focus on movement over weapon use.";
"oolite-tutorial-3-1" = "To refresh your memory, the basic flight controls are:\n[oolite_key_roll_left]: roll left\n[oolite_key_roll_right]: roll right\n[oolite_key_pitch_forward]: pitch forward\n[oolite_key_pitch_back]: pitch back\n[oolite_key_increase_speed]: increase speed\n[oolite_key_decrease_speed]: decrease speed\nHolding the Ctrl key while turning will increase precision.";
"oolite-tutorial-3-2" = "We have added a dense asteroid cluster nearby. Use your scanner to locate the buoy within it, then fly within 500m of the buoy and come to a complete stop.\n\nTip: use the range lines on the scanner to judge distance and zoom in with the '[oolite_key_scanner_zoom]' key to separate the closely-packed blobs";
"oolite-tutorial-3-3-error" = "To continue, come to a stop near the buoy. Use your '[oolite_key_scanner_unzoom]' key to maximise scan range if you are having trouble finding it.";
"oolite-tutorial-3-3" = "Some of the asteroids will now start moving towards you. Staying within 5000m of the buoy, use your scanner to spot the moving asteroids, and the movement controls to avoid them.\nTo help you, the asteroids will be highlighted red on your scanner. Keep moving!\nIf it gets too much, just fly further from the buoy.";
"oolite-tutorial-3-3-toofar" = "You moved too far from the buoy";
"oolite-tutorial-3-3-win" = "That's enough practice for now";
"oolite-tutorial-3-4" = "You survived [mission_oolite_tutorial_asteroids] seconds.\n\nIf you would like to try this challenge again, come to a complete stop before pressing '[oolite_key_activate_equipment]'. Otherwise, press '[oolite_key_activate_equipment]' while moving to finish the lesson.\n\nTip: use the '[oolite_key_scanner_zoom]' key to magnify your scanner.";
"oolite-tutorial-3-4a" = "You survived [mission_oolite_tutorial_asteroids] seconds.\n\nIf you would like to try this challenge again, this time without the scanner highlighting, come to a complete stop and press '[oolite_key_activate_equipment]'. Otherwise, press '[oolite_key_activate_equipment]' while moving to go to the next lesson.";
"oolite-tutorial-3-4b" = "You survived [mission_oolite_tutorial_asteroids] seconds without scanner assistance.\nThat's as much as this lesson can teach you, so press '[oolite_key_activate_equipment]' to go to the next lesson.";
"oolite-tutorial-4-0" = "Lesson 4: Weapons systems\nThis lesson will give you the chance to practice basic targeting and laser usage skills.";
"oolite-tutorial-4-1" = "Three asteroids have been added near you. Use the '[oolite_key_ident_system]' key to activate your identification system. Then, turn your ship so that one of the asteroids is directly in front of you. The ident system will then lock on to the asteroid.";
"oolite-tutorial-4-2" = "Three splinters (tiny rock fragments) have also been added now. Press '[oolite_key_ident_system]' again to reset the identification system to search mode, making sure you are not pointed at an asteroid. Then, use your scanner to search for the splinters. You may find you need to move closer to effectively identify such a small object.";
"oolite-tutorial-4-3" = "The rocks have now been removed. As your identification system loses a target, it will automatically reset to search mode. The 'Scanner Targeting Enhancement' and 'Target System Memory Expansion' optional addons will further improve the operation of the ident system.";
"oolite-tutorial-4-4" = "Your ship is equipped with a basic pulse laser. This weapon is not recommended for use in live combat, due to its slow rate of fire, but that property makes it an ideal training weapon.\nIt also has the advantage that it will take much longer to overheat than a beam laser.";
"oolite-tutorial-4-5" = "The '[oolite_key_fire_lasers]' key is used to fire your laser. We have added five stationary asteroids to use as target practice. Once you are confident of your ability to hit a large unmoving target, move on to the next stage.\nNote that your laser has a maximum range of 12.5km, so you may need to get closer.";
"oolite-tutorial-4-6" = "For the second stage, we have added some smaller boulders, and set them moving. Again, move on once you are confident in your ability to destroy these targets.";
"oolite-tutorial-4-7" = "Finally, we have added some tiny rock splinters for you to hunt down. Make sure your aim is precise! Once you are ready, press '[oolite_key_activate_equipment]' to start the next lesson.";
"oolite-tutorial-5-0" = "Lesson 5: Missiles\nThis lesson covers basic missile use and anti-missile tactics.";
"oolite-tutorial-5-1" = "The Cobra III can carry up to four pylon weapons. We have loaded three of them with standard ship-to-ship missiles. Press '[oolite_key_target_missile]' to arm a missile. The missile icon will turn yellow.";
"oolite-tutorial-5-2" = "We have added two asteroids, specially toughened so that your pulse laser will be ineffective. Turn to face one of them, and the armed missile will turn red as it locks on. You can use '[oolite_key_untarget_missile]' to break the lock, or '[oolite_key_target_missile]' to try to lock on to another target.";
"oolite-tutorial-5-3" = "If you wish to change the missile you are using, press '[oolite_key_next_missile]'. As for now all your missiles are identical, however, you can launch the missile with '[oolite_key_launch_missile]'. If it doesn't destroy the asteroid, launch another!";
"oolite-tutorial-5-4" = "You can launch missiles, but what if a missile is launched at you? A standard missile contains enough explosives to destroy or seriously damage a Cobra III. The second half of this lesson describes missile avoidance techniques.";
"oolite-tutorial-5-5" = "Missile avoidance: 1/6\nMissiles can be destroyed by laser fire, but this is tricky to get right, especially with only a pulse laser, so for now we recommend that you try to avoid them. Use your scanner to locate the light blue marker, and try to keep it behind you and off to one side as it closes in.";
"oolite-tutorial-5-6" = "Missile avoidance: 2/6\nOnce the missile gets closer, start making sharp turns away from it to throw it off. Even if you don't avoid it, if it explodes behind you then your engines are likely to help you away from the blast, reducing the damage you take. A head-on collision is likely to be lethal.";
"oolite-tutorial-5-7" = "Missile avoidance: 3/6\nIf you find missile avoidance difficult, the 'ECM (Electronic Counter-Measures) System' is available from most shipyards as an addon to your ship. It will confuse most but not all missiles into losing you as a target, and they will harmlessly self-destruct.";
"oolite-tutorial-5-8" = "Missile avoidance: 4/6\nIn live combat, if you do not have an ECM, one of your enemies might. So, if you get a missile fired at you, fire one right back at them - the ECM field is indiscriminate and will destroy both missiles.";
"oolite-tutorial-5-9" = "Missile avoidance: 5/6\nAnother approach is to outrun the missile - their fuel supply is extremely limited. If the missile has been fired from long-range, turning away from it and flying at full speed may get you clear.";
"oolite-tutorial-5-10" = "Missile avoidance: 6/6\nOkay, that's enough talking - time for some practice. When you next press '[oolite_key_activate_equipment]', we will fire a missile at you. Avoid it by whatever means you can, and note the warnings your HUD gives.";
"oolite-tutorial-5-11" = "Here it comes. Good luck!\n\nOnce you have survived the missile, press '[oolite_key_activate_equipment]' to start the next lesson.";
"oolite-tutorial-6-0" = "Lesson 6: Combat practice\nNow it's time to put everything you've learned in the previous lessons together, and fight some more challenging opponents.";
"oolite-tutorial-6-1" = "You'll be fighting simulated Krait fighters. The Krait is an old design, nowadays mostly superseded by the Mamba and Sidewinder, but it's cheap and easy to repair, and the large hull makes it easy to fit extra equipment, so it's still popular with some pilots. Press '[oolite_key_activate_equipment]' to start.";
"oolite-tutorial-6-2" = "This first Krait is unarmed - destroy it as fast as you can. This one should be easy, but if you ever feel out of your depth in later stages, we've also added a marker buoy. Shoot the buoy to end the lesson.\nYou only get three missiles for the entire course, so use them wisely.";
"oolite-tutorial-6-3" = "Now we move on to targets which can fight back. This Krait has a pulse laser like your own. It's not too much of a threat to your ship, but you should finish it quickly.";
"oolite-tutorial-6-4" = "Good work. Here's two more to take on. While fighting one, don't lose track of what the other is up to.\n\nTip: Zoom your scanner in so that you can see where the one you're firing at is going and keep on it. If you split your fire between both, you won't do enough damage.";
"oolite-tutorial-6-5" = "Excellent. That's the basics done. You can either end the lesson now by shooting the buoy, or you can continue to face harder targets by pressing '[oolite_key_activate_equipment]'.\nIf you want to wait a little for your shields to recharge, that's okay.";
"oolite-tutorial-6-6" = "This Krait has been upgraded to carry a beam laser. It'll tear up your shields in no time if you let it. Move!\n\nTip: Your weapon is weaker, so dodge and close the range rather than getting into a long-range shooting match.";
"oolite-tutorial-6-7" = "So far, so good. See if you can handle two at once.\n\nTip: when outnumbered like this, use a missile to distract one while you fight the other.";
"oolite-tutorial-6-8" = "You did it! We do have a third stage available if you're feeling up to it - press '[oolite_key_activate_equipment]' to start it. If that last fight was any trouble, though, maybe you'd be better stopping now by shooting the buoy to complete the lesson.";
"oolite-tutorial-6-9" = "As you wish. This Krait is well-armed, well-equipped, and we've got a local escort pilot in the next simulator booth to fly it for us. Your Cobra might still be a superior ship, but you'll have to make every shot count.";
"oolite-tutorial-6-10" = "Very well done! If you fly like that, you might stand a chance when the pirates come for you. That's all we've got for combat training. Press '[oolite_key_activate_equipment]' to start the next lesson.";
"oolite-tutorial-7-0" = "Lesson 7: Docking practice\nThis lesson will teach you how to dock your ship with a standard Cooperative station, and do so safely.";
"oolite-tutorial-7-1" = "Docking with the station is one of the things novice pilots often find the most difficult, and due to the size and solidity of the station, failing to dock successfully is often fatal. In this lesson, you'll learn the slow, safe way to dock. There are many shortcuts often taken by experienced pilots.";
"oolite-tutorial-7-2" = "We have added a Coriolis station to the simulator, coloured green on your scanner. As you can see, it rotates a few times every minute to provide cheap artificial gravity. There is a single docking bay, on the axis of rotation.";
"oolite-tutorial-7-3" = "In front of the station is the navigation buoy. For primary system stations this will always be on the side facing the planet - other stations may face in any direction. Fly close to the buoy, then press '[oolite_key_activate_equipment]'.";
"oolite-tutorial-7-4" = "Turn to face the station now. As you can see the docking bay is rectangular. The Cobra III is much wider than it is tall, so when you dock, you need to have the long axis of the bay as near to horizontal as possible.";
"oolite-tutorial-7-5" = "We'll start with the pre-docking checklist. Firstly, to avoid accidentally shooting your weapons at the station, put them into safe mode with the '[oolite_key_weapons_online_toggle]' key, and note the HUD message that appears. You can rearm them later with the same key.";
"oolite-tutorial-7-6" = "The next step is to request docking clearance. Target the station with your identification system (press '[oolite_key_ident_system]') and then press '[oolite_key_docking_clearance_request]' to request clearance. The station will respond, giving you a docking deadline (or if traffic is busy, requesting you wait)";
"oolite-tutorial-7-7" = "Okay, now it's time to dock. You need to do two things to dock safely - come in straight down the line extending from the docking bay, and keep the bay horizontal. If you get into trouble, just turn around, back off to the buoy, and start over. Press '[oolite_key_activate_equipment]' for a few more tips before you start.";
"oolite-tutorial-7-8" = "Docking Tips: 1/5\nOn your first few attempts, clearance might expire. The station will warn you - press '[oolite_key_docking_clearance_request]' to request an extension, which is almost always granted.";
"oolite-tutorial-7-9" = "Docking Tips: 2/5\nIf you're coming in on course, you'll be able to see all five interior walls of the bay at once. If you can't see a wall, temporarily point your nose well past the walls you can see.";
"oolite-tutorial-7-10" = "Docking Tips: 3/5\nIf you try to match the rotation before you're on course, you might get disoriented. Don't worry about the rotation until you're a kilometre or so out.";
"oolite-tutorial-7-11" = "Docking Tips: 4/5\nNormally if it's going wrong you should just stop, turn round, and try again. If you're too close, though, concentrate on getting the rotation right - your shields will bounce you in if you're reasonably close, but you just won't fit in sideways.";
"oolite-tutorial-7-12" = "Docking Tips: 5/5\nFinally, keep practicing! It will get easier.\n\nPress '[oolite_key_activate_equipment]' again to bring up a summary of your docking status.";
"oolite-tutorial-7-13-title" = "Lesson 7: Docking";
"oolite-tutorial-7-13-message" = "Well done - you've docked with some degree of success.\n\nYou can try again for some more practice, especially if this attempt didn't go particularly well, or you scraped the shields. Alternatively, if when feel ready, you can move on to the next lesson.";
"oolite-tutorial-7-13-choices" = { "01_AGAIN" = "Try again"; "02_CONTINUE" = "Continue to next lesson"; };
"oolite-tutorial-8-0" = "Lesson 8: Information screens\nThis lesson covers various screens which are used to examine ship status and other information. After the docking lesson we thought you might need a short break from flying.";
"oolite-tutorial-8-1" = "Status screen: 1/4\nPressing '[oolite_key_gui_screen_status]' or 'F5' will bring up the status screen. You can use '[oolite_key_view_forward]' to return to forward view at any time while viewing it. Try it now, then come back to the forward view before continuing.";
"oolite-tutorial-8-2" = "Status screen: 2/4\nThe top of the status screen shows your current location and witchspace destination, a text description of your alert condition (remember the status light from the first lesson), your current fuel and cash, and your legal status and combat rating.";
"oolite-tutorial-8-3" = "Status screen: 3/4\nThe bottom of the screen lists your ship's fitted equipment. We have added a few extra items to your ship which you can inspect now.";
"oolite-tutorial-8-4" = "Status screen: 4/4\nIf your equipment is damaged in combat or through failure to keep your ship well maintained, it will be coloured orange on the screen, with 'n/a' appended to its description. Check the screen again for an example.";
"oolite-tutorial-8-5" = "Manifest screen: 1/2\nPressing '[oolite_key_gui_screen_status]' or 'F5' while already on the status screen will display the manifest screen (so press either key twice from elsewhere). This displays your current cargo and a log of outstanding work contracts you have taken.";
"oolite-tutorial-8-6" = "Manifest screen: 2/2\nA number of cargo pods have been added to your hold to demonstrate the manifest screen, and a sample work contract entry has been added.";
"oolite-tutorial-8-6-info" = "Training course: complete the course";
"oolite-tutorial-8-7" = "Short range chart: 1/10\nThe short range chart is reached by pressing '[oolite_key_gui_chart_screens]' or 'F6'. It shows the nearby systems, and your current position is marked with a green cross. A green circle shows the limits of your current witchspace fuel.";
"oolite-tutorial-8-8" = "Short range chart: 2/10\nWhere systems may be relevant to a contract of employment, they are often marked on the chart. An example of this has now been added to the nearby Leesti system.";
"oolite-tutorial-8-9" = "Short range chart: 3/10\nThe information screens share common directional controls - '[oolite_key_gui_arrow_left]', '[oolite_key_gui_arrow_right]', '[oolite_key_gui_arrow_up]', and '[oolite_key_gui_arrow_down]'. On this screen, they can be used to select a destination system.";
"oolite-tutorial-8-10" = "Short range chart: 4/10\nPressing the '[oolite_key_map_info]' key while on the short range chart will replace the system names with symbols reflecting key aspects of those systems - government, economy, and technological level.";
"oolite-tutorial-8-11" = "Short range chart: 5/10\nGovernment symbols:\n\007 - Corporate State\n\006 - Democracy\n\005 - Confederacy\n\004 - Communist\n\003 - Dictatorship\n\002 - Multi-Government\n\001 - Feudal\n\000 - Anarchy";
"oolite-tutorial-8-12" = "Short range chart: 6/10\nThe government type approximately corresponds to the level of control the planet has over its orbital space and therefore the likelihood of pirate attacks, with Corporate States being the safest, and Anarchies the most dangerous.";
"oolite-tutorial-8-13" = "Short range chart: 7/10\nEconomic symbols:\n\020 - Poor Agricultural\n\021 - Average Agricultural\n\022 - Rich Agricultural\n\023 - Mainly Agricultural\n\024 - Mainly Industrial\n\025 - Poor Industrial\n\026 - Average Industrial\n\027 - Rich Industrial";
"oolite-tutorial-8-14" = "Short range chart: 8/10\nThe economy gives an idea of the types of trade goods which are likely to be cheap to buy or profitable to sell in this system. Most trade routes are between Agricultural and Industrial worlds.";
"oolite-tutorial-8-15" = "Short range chart: 9/10\nThe number is the technological level (TL) and represents the planet's capabilities at ship construction and maintenance, on a scale from 1 to 15. At higher TL systems, more equipment and ships will be available from stations.";
"oolite-tutorial-8-16" = "Short range chart: 10/10\nOnce you have selected a destination on the short range chart, the '[oolite_key_hyperspace]' key will activate the witchspace jump sequence. You are recommended to fly straight and level while the sequence is underway. Once the sequence is complete, you will travel through witchspace to your chosen destination.";
"oolite-tutorial-8-17" = "Long range chart: 1/2\nPressing '[oolite_key_gui_chart_screens]' or 'F6' again while on the short range chart screen displays the long range chart. This displays the wider region of space you are in, with your current position, witchspace range, and markers displayed as on the short range chart.";
"oolite-tutorial-8-18" = "Long range chart: 2/2\nThe scale is too wide to display name labels, but you can type letters to search for systems. Try going to the chart and typing 'ti' to discover all systems beginning with 'ti', which will be highlighted with a green square. You can hold shift while pressing the direction keys to switch between possibilities.";
"oolite-tutorial-8-19" = "System information: 1/1\nPressing '[oolite_key_gui_system_data]' or 'F7' will display information on the current witchspace destination system. This includes the government, economy and technological level mentioned earlier, as well as other key data for visitors.";
"oolite-tutorial-8-20" = "Market information: 1/1\nPressing '[oolite_key_gui_market]' or 'F8' will display the current market prices in this system, or, if docked at a station, for that station. When docked, cargo may be bought and sold using the direction controls.";
"oolite-tutorial-8-21" = "Station screens: 1/4\nWhile docked at a station, the view controls take on different functions, as external views are not required.";
"oolite-tutorial-8-22" = "Station screens: 2/4\nThe '[oolite_key_view_port]' or 'F3' key gives access to purchase fuel and equipment for your ship, and pressing it twice accesses the shipyard (if available) where other ships may be viewed and purchased.";
"oolite-tutorial-8-23" = "Station screens: 3/4\nThe '[oolite_key_view_starboard]' or 'F4' key meanwhile gives access to a range of ship and station systems and communications channels, where you may configure ship settings and look for information or work offers.";
"oolite-tutorial-8-24" = "Station screens: 4/4\nFinally, while docked at a station, the '[oolite_key_view_forward]' or 'F1' key is repurposed to request a launch slot, shortly after which you will be launched from the station.";
"oolite-tutorial-9-0" = "Lesson 9: System navigation\nThis lesson will cover navigation from the witchpoint to the system station.";
"oolite-tutorial-9-1" = "We have transported your ship near to the witchpoint buoy. This buoy marks a stable exit point from witchspace, and ships entering the system will do so near this buoy.";
"oolite-tutorial-9-2" = "The compass is used to direct you towards the planet. If you are facing the planet, the indicator will be green and centred. If you are facing directly away from the planet, it will be red and centred. Otherwise the off-centre position indicates the direction of the planet.";
"oolite-tutorial-9-3" = "Turn towards the planet and accelerate to maximum speed. Even at your top normal speed, it can take up to an hour to reach orbit. You can speed your flight up using the torus drive. Press '[oolite_key_jumpdrive]' to activate it.";
"oolite-tutorial-9-4" = "The torus drive provides significant acceleration and speed. Notice how quickly you have left the witchpoint buoy behind, and how fast the planet is coming closer. The torus drive is only able to operate far from large masses and high-density energy sources (other than those on your ship it is precisely calibrated for).";
"oolite-tutorial-9-5" = "The drive will automatically cut out and decelerate you to conventional speeds if you near such an object, and can only be reactivated when your alert condition is Green once again. Ahead is a simulated trade ship, such as you might meet on a routine journey to the planet.";
"oolite-tutorial-9-6" = "Not all ships will be as friendly as the trader. Pirates will attack shipping even occasionally in safe systems. If you are attacked, unable to run, and outnumbered too much to fight, then you can dump cargo to distract them. Use the '[oolite_key_rotate_cargo]' key to select the item to dump, then the '[oolite_key_dump_cargo]' key to drop it.";
"oolite-tutorial-9-7" = "It can take a long time to get past another ship without the torus drive. If you're in a hurry, it's often quicker to go fly a few kilometres perpendicular to their travel, and go around them.";
"oolite-tutorial-9-8" = "We have removed the trade ship now, so you should be back at condition Green. Re-engage the torus drive with '[oolite_key_jumpdrive]' and continue approaching the planet. Watch your altitude bar - don't get too close to the surface";
"oolite-tutorial-9-8-sun" = "This is the sun, not the planet. Easy mistake to make, so try again.";
"oolite-tutorial-9-8-toofar" = "Approach the planet to move to the next stage";
"oolite-tutorial-9-9" = "Now that you are near the planet, your compass has changed to track the main station. Stop the torus drive with the '[oolite_key_jumpdrive]' key, then use the compass to locate the station.";
"oolite-tutorial-9-10" = "Head towards the station. If you stopped far enough from the planet, you will still be able to use your torus drive. Otherwise, travel there at conventional speeds, or for a faster journey temporarily head further from the planet until your condition returns to Green.";
"oolite-tutorial-9-10-toofar" = "Approach the station to move to the next stage";
"oolite-tutorial-9-11" = "When you are close enough to the station, the aegis indicator - a large S - will appear. This indicates that you are within sensor range of the station and will be protected against pirate attack by the station's police ships.";
"oolite-tutorial-9-12" = "Between the station and the planet you will see the navigation buoy. As covered in previous lessons, you should now dock with the station. Remember to ask for clearance first by targeting the station and using the '[oolite_key_docking_clearance_request]' key.";
"oolite-tutorial-end-mfd" = "You have completed the course. Press '[oolite_key_activate_equipment]' to view your test scores.";
"oolite-tutorial-end-title" = "Course Complete";
"oolite-tutorial-end-message" = "You have now completed the Pilot's Training Course. Your scores:\n\nDeaths: [mission_oolite_tutorial_deaths]\n\nAsteroid navigation: [mission_oolite_tutorial_asteroids_result] ([mission_oolite_tutorial_asteroids] seconds)\nCombat practice: [mission_oolite_tutorial_combat_result] ([mission_oolite_tutorial_combat_duration] seconds)\n\nWe wish you luck in your future career.";
"oolite-tutorial-end-choices" = { "1" = "Exit Simulator"; };
"oolite-tutorial-end-notry" = "Incomplete";
"oolite-tutorial-end-try" = "Completed";
"oolite-tutorial-end-win" = "Gold qualification";
"oolite-tutorial-end-bonus" = "Platinum qualification";
}

View File

@ -13,6 +13,12 @@
encoding = "windows-latin-1";
texture = "oolite-font.png";
/* Some fonts (including the default) may adjust the kerning on
* the F6 screen slightly for better results. Units are the same
* as the 'widths' parameter. */
"f6KernGovernment" = 1.0;
"f6KernTechLevel" = 2.0;
substitutions =
{
/* This section specifies automatic string conversions. Some of these

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,6 @@
/* List of roles in various groupings. Used to determine initial
* reactions of ships to each other, among other things. Roles may be
* in more than one grouping.
*
* player-unknown should probably *only* be in oolite-pirate-victim
*/
{
/* Roles which pirates think might have tasty cargo. Equivalent in
@ -121,9 +119,12 @@
"oolite-scavenger" = (
"miner",
"rockhermit",
"rockhermit-chaotic",
"scavenger"
);
/* Roles the police are more likely to side with in a clean v
* clean fight */
"oolite-police-like" = (
@ -135,7 +136,9 @@
"hunter",
"hunter-medium",
"hunter-heavy",
"escape-capsule"
"escape-capsule",
"police",
"rockhermit"
);
/* Roles the police are less likely to side with in a clean v
@ -157,5 +160,56 @@
);
/* Roles that a trader will try to avoid being near */
"oolite-trader-dislike" = (
"pirate",
"pirate-light-fighter",
"pirate-medium-fighter",
"pirate-heavy-fighter",
"pirate-light-freighter",
"pirate-medium-freighter",
"pirate-heavy-freighter",
"pirate-aegis-raider",
"pirate-interceptor",
"assassin-light",
"assassin-medium",
"assassin-heavy",
"assassin-player",
"player-unknown",
"rockhermit-pirate"
);
/* Roles that a smuggler will try to avoid being near */
"oolite-smuggler-dislike" = (
"pirate",
"pirate-light-fighter",
"pirate-medium-fighter",
"pirate-heavy-fighter",
"pirate-light-freighter",
"pirate-medium-freighter",
"pirate-heavy-freighter",
"pirate-aegis-raider",
"pirate-interceptor",
"assassin-light",
"assassin-medium",
"assassin-heavy",
"assassin-player",
"player-unknown",
"hunter",
"hunter-medium",
"hunter-heavy",
"interceptor",
"police",
"police-station-patrol",
"police-witchpoint-patrol"
);
/* Roles of rock hermits */
"oolite-rockhermits" = (
"rockhermit",
"rockhermit-chaotic",
"rockhermit-pirate"
);
}

View File

@ -0,0 +1,21 @@
(
{
"file" = "oolite-standard.oolite-save";
"name" = "[oolite-scenario-standard-name]";
"description" = "[oolite-scenario-standard-description]";
"model" = "cobra3-player";
},
{
"file" = "oolite-tutorial.oolite-save";
"name" = "[oolite-scenario-tutorial-name]";
"description" = "[oolite-scenario-tutorial-description]";
"model" = "coriolis-station";
"scenario" = "oolite-tutorial";
},
{
"file" = "oolite-strict.oolite-save";
"name" = "[oolite-scenario-strict-name]";
"description" = "[oolite-scenario-strict-description]";
"model" = "oolite-cobra3-strict";
}
)

View File

@ -7,6 +7,9 @@
// Use the following settings to add custom images to Oolite's screens
intro = "intro.png"; // background for the ships at game start
shiplibrary = "shiplibrary.png"; // background for the ship library screen
keyboardsettings = "keyboardsettings.png"; // background for the keyboard settings display
newgame = "newgame.png"; // background for the new game (scenario select) screen
status = "status.png";
status_docked = "status-docked.png"; // if not defined, same as status
status_in_flight = "status-in-flight.png"; // if not defined, same as status
@ -60,7 +63,7 @@
docked_overlay = "docked-overlay.png";
paused_overlay = "paused-overlay.png"; // in-flight and paused
paused_docked_overlay = "paused-docked-overlay.png";
newgame_overlay = "newgame_overlay.png";
overwrite_overlay = "overwrite-overlay.png"; // overlay used in the 'overwrite saved game?' screen
*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,222 @@
(
/* Ordered to match shipdata.plist to make it easier to edit; will
* be re-ordered by Oolite to a more sensible order later. Classes
* currently defined by Oolite are "ship", "station", "weapon",
* "thargoid", and "misc". Other classes may be created by
* defining "oolite-ship-library-category-X" and
* "oolite-ship-library-category-plural-X" description.plist
* keys */
{
ship = "adder";
class = "ship";
summary = "[oolite-ship-library-summary-LT]";
description = "[oolite-ship-library-description-adder]";
},
{
ship = "anaconda";
class = "ship";
summary = "[oolite-ship-library-summary-HFr]";
description = "[oolite-ship-library-description-anaconda]";
cargo = "750 TC"; // because the NPC isn't really this big
},
{
ship = "asp";
class = "ship";
summary = "[oolite-ship-library-summary-HF]";
description = "[oolite-ship-library-description-asp]";
},
{
ship = "asteroid";
class = "misc";
summary = "[oolite-ship-library-summary-NB]";
description = "[oolite-ship-library-description-asteroid]";
},
{
ship = "barrel";
class = "misc";
summary = "[oolite-ship-library-summary-CG]";
description = "[oolite-ship-library-description-barrel]";
},
{
ship = "boa";
class = "ship";
summary = "[oolite-ship-library-summary-MFr]";
description = "[oolite-ship-library-description-boa]";
},
{
ship = "boa-mk2";
class = "ship";
summary = "[oolite-ship-library-summary-MFr]";
description = "[oolite-ship-library-description-boa-mk2]";
},
{
ship = "buoy";
class = "misc";
summary = "[oolite-ship-library-summary-SA]";
description = "[oolite-ship-library-description-buoy]";
},
{
ship = "cobramk1";
class = "ship";
summary = "[oolite-ship-library-summary-LM]";
description = "[oolite-ship-library-description-cobramk1]";
},
{
ship = "cobra3-trader";
class = "ship";
summary = "[oolite-ship-library-summary-HM]";
description = "[oolite-ship-library-description-cobra3]";
},
{
ship = "coriolis-station";
class = "station";
summary = "[oolite-ship-library-summary-SO]";
description = "[oolite-ship-library-description-coriolis]";
},
{
ship = "dodecahedron-station";
class = "station";
summary = "[oolite-ship-library-summary-SO]";
description = "[oolite-ship-library-description-dodec]";
},
{
ship = "ecm-proof-missile";
class = "weapon";
summary = "[oolite-ship-library-summary-WMs]";
description = "[oolite-ship-library-description-hardmissile]";
},
{
ship = "escape-capsule";
class = "misc";
ship_data = true; // it's a ship, sort of
summary = "[oolite-ship-library-summary-CP]";
description = "[oolite-ship-library-description-escape]";
},
{
ship = "ferdelance";
class = "ship";
summary = "[oolite-ship-library-summary-MT]";
description = "[oolite-ship-library-description-ferdelance]";
},
{
ship = "gecko";
class = "ship";
summary = "[oolite-ship-library-summary-MF]";
description = "[oolite-ship-library-description-gecko]";
},
{
ship = "icosahedron-station";
class = "station";
summary = "[oolite-ship-library-summary-SO]";
description = "[oolite-ship-library-description-ico]";
},
{
ship = "krait";
class = "ship";
summary = "[oolite-ship-library-summary-LF]";
description = "[oolite-ship-library-description-krait]";
},
{
ship = "mamba";
class = "ship";
summary = "[oolite-ship-library-summary-LF]";
description = "[oolite-ship-library-description-mamba]";
},
{
ship = "missile";
class = "weapon";
summary = "[oolite-ship-library-summary-WMs]";
description = "[oolite-ship-library-description-missile]";
},
{
ship = "moray";
class = "ship";
summary = "[oolite-ship-library-summary-LM]";
description = "[oolite-ship-library-description-moray]";
},
{
ship = "python";
class = "ship";
summary = "[oolite-ship-library-summary-MFr]";
description = "[oolite-ship-library-description-python]";
},
{
ship = "qbomb";
class = "weapon";
summary = "[oolite-ship-library-summary-WMn]";
description = "[oolite-ship-library-description-qbomb]";
},
{
ship = "rock-hermit";
class = "station";
summary = "[oolite-ship-library-summary-SM]";
description = "[oolite-ship-library-description-rockhermit]";
},
{
ship = "shuttle";
class = "ship";
summary = "[oolite-ship-library-summary-LT]";
description = "[oolite-ship-library-description-shuttle]";
},
{
ship = "sidewinder";
class = "ship";
summary = "[oolite-ship-library-summary-LF]";
description = "[oolite-ship-library-description-sidewinder]";
},
{
ship = "tharglet";
class = "thargoid";
summary = "[oolite-ship-library-summary-LF]";
description = "[oolite-ship-library-description-tharglet]";
ship_data = true;
speed = "[oolite-ship-library-unknown]";
turn_rate = "[oolite-ship-library-unknown]";
generator = "[oolite-ship-library-unknown]";
shields = "[oolite-ship-library-unknown]";
},
{
ship = "thargoid";
class = "thargoid";
summary = "[oolite-ship-library-summary-RW]";
description = "[oolite-ship-library-description-thargoid]";
ship_data = true;
speed = "[oolite-ship-library-unknown]";
cargo = "[oolite-ship-library-unknown]";
turn_rate = "[oolite-ship-library-unknown]";
generator = "[oolite-ship-library-unknown]";
shields = "[oolite-ship-library-unknown]";
weapons = "[oolite-ship-library-description-thargoid-weapons]";
},
{
ship = "transporter";
class = "ship";
summary = "[oolite-ship-library-summary-MT]";
description = "[oolite-ship-library-description-transporter]";
},
{
ship = "viper";
class = "ship";
summary = "[oolite-ship-library-summary-PLF]";
description = "[oolite-ship-library-description-viper]";
turn_rate = "[oolite-ship-library-classified]";
generator = "[oolite-ship-library-classified]";
shields = "[oolite-ship-library-classified]";
},
{
ship = "viper-interceptor";
class = "ship";
summary = "[oolite-ship-library-summary-PHF]";
description = "[oolite-ship-library-description-viperinterceptor]";
turn_rate = "[oolite-ship-library-classified]";
generator = "[oolite-ship-library-classified]";
shields = "[oolite-ship-library-classified]";
},
{
ship = "worm";
class = "ship";
summary = "[oolite-ship-library-summary-LT]";
description = "[oolite-ship-library-description-worm]";
}
)

View File

@ -74,6 +74,7 @@
"optional_equipment" =
(
"EQ_ECM",
"EQ_FUEL_SCOOPS",
"EQ_ESCAPE_POD",
"EQ_ENERGY_BOMB",
"EQ_ENERGY_UNIT",

View File

@ -24,7 +24,11 @@
" credits."
),
(
" Cr",
" Cr.",
" credits"
),
(
" Cr ",
" credits"
),
(

View File

@ -0,0 +1,317 @@
{
/* Strictly, commodity names should be prefixed oolite-, but for
* compatibility with older OXPs, keep the older names. OXP
* commodities should be prefixed as usual. */
"food" = {
"name" = "[commodity-name food]";
"classes" = ("oolite-consumer","oolite-edible","oolite-farming");
"quantity_unit" = 0; // 0=t
"peak_export" = 7; // Poor Ag
"peak_import" = 0; // Rich Ind
"price_average" = 50; // decicredits
// fraction of average ~= 2.75 credits
"price_economic" = 0.55;
// fraction of average ~= 0.2 credits
"price_random" = 0.04;
"quantity_average" = 13.5; // gets rounded
"quantity_economic" = 0.52;
"quantity_random" = 0.04;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 1.0;
"sort_order" = 100;
};
"textiles" = {
"name" = "[commodity-name textiles]";
"classes" = ("oolite-consumer","oolite-wearable","oolite-farming");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 71;
"price_economic" = 0.18;
"price_random" = 0.09;
"quantity_average" = 15;
"quantity_economic" = 0.23;
"quantity_random" = 0.1;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0.25;
"sort_order" = 200;
};
"radioactives" = {
"name" = "[commodity-name radioactives]";
"classes" = ("oolite-dangerous","oolite-mining");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 231;
"price_economic" = 0.19;
"price_random" = 0.06;
"quantity_average" = 16;
"quantity_economic" = 0.66;
"quantity_random" = 0.09;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0.75;
"sort_order" = 300;
};
"slaves" = {
"name" = "[commodity-name slaves]";
"classes" = ("oolite-restricted","oolite-living","oolite-slaves","oolite-salvage");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 152;
"price_economic" = 0.45;
"price_random" = 0.40;
"quantity_average" = 9.75;
"quantity_economic" = 1.10;
"quantity_random" = 1.59;
"legality_export" = 1;
"legality_import" = 0;
"trumble_opinion" = 0.01;
"sort_order" = 400;
"comment" = "[oolite-commodity-illegal]";
};
"liquor_wines" = {
"name" = "[commodity-name liquor_wines]";
"classes" = ("oolite-consumer","oolite-edible","oolite-farming");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 291;
"price_economic" = 0.24;
"price_random" = 0.05;
"quantity_average" = 20;
"quantity_economic" = 0.88;
"quantity_random" = 0.38;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0.95;
"sort_order" = 500;
};
"luxuries" = {
"name" = "[commodity-name luxuries]";
"classes" = ("oolite-consumer","oolite-luxury");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 902;
"price_economic" = 0.12;
"price_random" = 0.01;
"quantity_average" = 27.5;
"quantity_economic" = 1.02;
"quantity_random" = 0.05;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 1.25;
"sort_order" = 600;
};
"narcotics" = {
"name" = "[commodity-name narcotics]";
"classes" = ("oolite-consumer","oolite-dangerous","oolite-restricted","oolite-medical");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 0;
"price_average" = 512;
"price_economic" = 0;
"price_random" = 1.0;
"quantity_average" = 32;
"quantity_economic" = 0;
"quantity_random" = 1.0;
"legality_export" = 2;
"legality_import" = 0;
"trumble_opinion" = 1.05;
"sort_order" = 700;
"comment" = "[oolite-commodity-illegal]";
};
"computers" = {
"name" = "[commodity-name computers]";
"classes" = ("oolite-business","oolite-shipyard","oolite-technological");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 818;
"price_economic" = 0.24;
"price_random" = 0.01;
"quantity_average" = 8.5;
"quantity_economic" = 5.77;
"quantity_random" = 0.17;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 800;
};
"machinery" = {
"name" = "[commodity-name machinery]";
"classes" = ("oolite-business","oolite-technological","oolite-machinery");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 560;
"price_economic" = 0.14;
"price_random" = 0.03;
"quantity_average" = 22.5;
"quantity_economic" = 0.93;
"quantity_random" = 0.16;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 900;
};
"alloys" = {
"name" = "[commodity-name alloys]";
"classes" = ("oolite-business","oolite-shipyard","oolite-metals","oolite-salvage");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 388;
"price_economic" = 0.03;
"price_random" = 0.16;
"quantity_average" = 29;
"quantity_economic" = 0.12;
"quantity_random" = 0.53;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1000;
};
"firearms" = {
"name" = "[commodity-name firearms]";
"classes" = ("oolite-dangerous","oolite-restricted","oolite-military","oolite-weapons");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 692;
"price_economic" = 0.26;
"price_random" = 0.02;
"quantity_average" = 1;
"quantity_economic" = 32.5;
"quantity_random" = 3.5;
"legality_export" = 1;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1100;
"comment" = "[oolite-commodity-illegal]";
};
"furs" = {
"name" = "[commodity-name furs]";
"classes" = ("oolite-consumer","oolite-farming","oolite-wearable","oolite-animalproduct");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 704;
"price_economic" = 0.18;
"price_random" = 0.18;
"quantity_average" = 27.5;
"quantity_economic" = 1.15;
"quantity_random" = 1.15;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0.15;
"sort_order" = 1200;
};
"minerals" = {
"name" = "[commodity-name minerals]";
"classes" = ("oolite-mining","oolite-business","oolite-rawmaterial");
"quantity_unit" = 0;
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 120;
"price_economic" = 0.11;
"price_random" = 0.05;
"quantity_average" = 58;
"quantity_economic" = 0.06;
"quantity_random" = 0.03;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1300;
};
"gold" = {
"name" = "[commodity-name gold]";
"classes" = ("oolite-mining","oolite-business","oolite-consumer","oolite-metals");
"quantity_unit" = 1; // kg
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 388;
"price_economic" = 0.04;
"price_random" = 0.05;
"quantity_average" = 9;
"quantity_economic" = 0.39;
"quantity_random" = 0.39;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1400;
};
"platinum" = {
"name" = "[commodity-name platinum]";
"classes" = ("oolite-mining","oolite-business","oolite-consumer","oolite-metals");
"quantity_unit" = 1; // kg
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 718;
"price_economic" = 0.04;
"price_random" = 0.09;
"quantity_average" = 13.5;
"quantity_economic" = 0.52;
"quantity_random" = 1.15;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1500;
};
"gem_stones" = {
"name" = "[commodity-name gem_stones]";
"classes" = ("oolite-mining","oolite-consumer");
"quantity_unit" = 2; // g
"peak_export" = 7;
"peak_import" = 0;
"price_average" = 196;
"price_economic" = 0.07;
"price_random" = 0.15;
"quantity_average" = 6.75;
"quantity_economic" = 0.26;
"quantity_random" = 1.11;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1600;
};
"alien_items" = {
"name" = "[commodity-name alien_items]";
"classes" = ("oolite-alien","oolite-thargoid","oolite-military");
"quantity_unit" = 0;
"peak_export" = 0;
"peak_import" = 7;
"price_average" = 436;
"price_economic" = 0.48;
"price_random" = 0.03;
"quantity_average" = 0;
"quantity_economic" = 0;
"quantity_random" = 0;
"legality_export" = 0;
"legality_import" = 0;
"trumble_opinion" = 0;
"sort_order" = 1700;
};
}

View File

@ -7,6 +7,7 @@
stages =
(
OOCheckRequiresPListVerifierStage,
OOCheckPListSyntaxVerifierStage,
OOCheckDemoShipsPListVerifierStage,
OOCheckEquipmentPListVerifierStage,
OOTextureVerifierStage,
@ -56,11 +57,15 @@
"autoAImap.plist",
"characters.plist",
"commodities.plist",
"crosshairs.plist",
"customsounds.plist",
"demoships.plist",
"descriptions.plist",
"effectdata.plist",
"equipment.plist",
"explosions.plist",
"global-settings.plist",
"gui-settings.plist",
"hud.plist",
"illegal_goods.plist",
"keyconfig.plist",
@ -68,15 +73,62 @@
"missiontext.plist",
"nebulatextures.plist",
"planetinfo.plist",
"requires.plist",
"role-categories.plist",
"scenarios.plist",
"screenbackgrounds.plist",
"script.plist",
"script.js",
"shipdata.plist",
"shipyard.plist",
"shiplibrary.plist",
"speech_pronunciation_guide.plist",
"startextures.plist",
"trade-goods.plist",
"world-scripts.plist"
);
// the files in the "Config" list which are arrays
"ConfigArrays" =
(
"demoships.plist",
"equipment.plist",
"nebulatextures.plist",
"scenarios.plist",
"shiplibrary.plist",
"speech_pronunciation_guide.plist",
"startextures.plist",
"world-scripts.plist"
);
// the files in the "Config" list which are dictionaries
"ConfigDictionaries" =
(
"autoAImap.plist",
"characters.plist",
"commodities.plist",
"crosshairs.plist",
"customsounds.plist",
"descriptions.plist",
"effectdata.plist",
"explosions.plist",
"global-settings.plist",
"gui-settings.plist",
"hud.plist",
"illegal_goods.plist",
"keyconfig.plist",
"material-defaults.plist",
"missiontext.plist",
"planetinfo.plist",
"role-categories.plist",
"screenbackgrounds.plist",
"script.plist",
"script.js",
"shipdata.plist",
"shipyard.plist",
"startextures.plist",
"trade-goods.plist"
);
"Sounds" =
(
"afterburner1.ogg",
@ -274,6 +326,7 @@
"escape_pod_model",
"aft_eject_position",
"auto_ai",
"auto_weapons",
"script",
"conditions",
"condition_script",

View File

@ -330,7 +330,9 @@
"drawAftShieldBar:",
"drawYellowSurround:",
"drawGreenSurround:",
"drawSurround:",
"drawFuelBar:",
"drawWitchspaceDestination:",
"drawCabinTempBar:",
"drawWeaponTempBar:",
"drawAltitudeBar:",
@ -340,7 +342,11 @@
"drawPrimedEquipment:",
"drawASCTarget:",
"drawWeaponsOfflineText:",
"drawFPSInfoCounter:"
"drawFPSInfoCounter:",
"drawCustomBar:",
"drawCustomText:",
"drawCustomIndicator:",
"drawCustomLight:"
);
shader_entity_binding_methods =
@ -348,6 +354,7 @@
"position",
"orientation",
"relativePosition",
"cameraRelativePosition",
"viewpointOffset",
"collisionRadius",
"mass",

View File

@ -1,6 +1,7 @@
(
/* General */
"oolite-populator.js",
"oolite-equipment-control.js",
/* AI Construction libraries */
"oolite-priorityai.js",
@ -18,6 +19,8 @@
"oolite-cloaking-device-mission.js",
"oolite-nova-mission.js",
"oolite-thargoid-plans-mission.js",
"oolite-trumbles-mission.js"
"oolite-trumbles-mission.js",
/* Tutorial */
"oolite-tutorial.js"
)

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,41 @@
/*
oolite-cloaking-device-equipment.js
Equipment script for cloaking device.
Oolite
Copyright © 2004-2013 Giles C Williams and contributors
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., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
*/
/*jslint white: true, undef: true, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */
/*global worldScripts*/
"use strict";
this.name = "Cloaking Device";
this.author = "cim";
this.copyright = "© 2008-2013 the Oolite team.";
this.activated = function()
{

View File

@ -37,7 +37,6 @@ this.name = "oolite-cloaking-device";
this.author = "Jens Ayton";
this.copyright = "© 2007-2013 the Oolite team.";
this.description = "Cloaking device mission in galaxy 5.";
this.version = "1.79";
this.startUp = function ()
@ -71,6 +70,8 @@ this.systemWillPopulate = function ()
if (missionVariables.cloakcounter > 6 && system.countShipsWithRole("asp-cloaked") === 0)
{
// Then trigger the ambush!
// ensure all normal system population is set up first
worldScripts["oolite-populator"].systemWillPopulate();
system.setPopulator("oolite-cloaking-device-mission",
{
priority: 50,
@ -90,6 +91,17 @@ this.systemWillPopulate = function ()
}
}
});
/* Then remove most ships from the default populator which
* might attack the cloaked group. The repopulator will add more
* later. */
system.setPopulator("oolite-interceptors-witchpoint",null);
system.setPopulator("oolite-hunters-route1",null);
system.setPopulator("oolite-hunters-medium-route1",null);
system.setPopulator("oolite-hunters-medium-route3",null);
system.setPopulator("oolite-hunters-heavy-route1",null);
system.setPopulator("oolite-hunters-heavy-route3",null);
system.setPopulator("oolite-police-route1",null);
}
}
}

View File

@ -36,7 +36,6 @@
this.name = "oolite-cloaking-device-pod";
this.author = "Jens Ayton";
this.copyright = "© 2007-2013 the Oolite team.";
this.version = "1.79";
this.shipWasScooped = function (scooper)

View File

@ -36,7 +36,6 @@ MA 02110-1301, USA.
this.name = "oolite-cloaking-device-target-ship";
this.author = "Jens Ayton";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
this.shipDied = function ()

View File

@ -36,45 +36,58 @@ MA 02110-1301, USA.
this.name = "oolite-conditions";
this.author = "cim";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
/* contexts: npc, purchase, scripted, newShip, (loading), (damage), (portable) */
this.allowAwardEquipment = function(equipment, ship, context)
{
if (equipment == "EQ_NAVAL_ENERGY_UNIT")
if (equipment == "EQ_NAVAL_ENERGY_UNIT")
{
// Naval Energy Unit purchase (including repair) by player
// requires Thargoid Plans complete
if (context == "purchase" && missionVariables.thargplans != "MISSION_COMPLETE")
{
// Naval Energy Unit purchase (including repair) by player
// requires Thargoid Plans complete
if (context == "purchase" && missionVariables.thargplans != "MISSION_COMPLETE")
{
return false;
}
return false;
}
}
if (equipment == "EQ_CLOAKING_DEVICE")
if (equipment == "EQ_CLOAKING_DEVICE")
{
// Cloaking Device can't be purchased by player, can be repaired
if (context == "purchase" && player.ship.equipmentStatus("EQ_CLOAKING_DEVICE") != "EQUIPMENT_DAMAGED")
{
// Cloaking Device can't be purchased by player, can be repaired
if (context == "purchase" && player.ship.equipmentStatus("EQ_CLOAKING_DEVICE") != "EQUIPMENT_DAMAGED")
{
return false;
}
// Never found on ships in shipyards
if (context == "newShip")
{
return false;
}
return false;
}
// OXP hook to allow stations to forbid specific equipment
if (context == "purchase" && player.ship.dockedStation && player.ship.dockedStation.scriptInfo["oolite-barred-equipment"])
// Never found on ships in shipyards
if (context == "newShip")
{
if (player.ship.dockedStation.scriptInfo["oolite-barred-equipment"].indexOf(equipment) != -1)
{
return false;
}
return false;
}
}
// otherwise allowed
return true;
if (equipment == "EQ_OOLITE_TUTORIAL_CONTROLS")
{
if (context == "purchase" || context == "npc" || context == "newShip" || context == "scripted")
{
return false;
}
}
// OXP hook to allow stations to forbid specific equipment
if (context == "purchase" && player.ship.dockedStation && player.ship.dockedStation.scriptInfo["oolite-barred-equipment"])
{
if (player.ship.dockedStation.scriptInfo["oolite-barred-equipment"].indexOf(equipment) != -1)
{
return false;
}
}
// OXP hook to allow ships to forbid specific "available to all" equipment
if (ship.scriptInfo && ship.scriptInfo["oolite-barred-equipment"] && ship.scriptInfo["oolite-barred-equipment"].indexOf(equipment) != -1)
{
return false;
}
// otherwise allowed
return true;
}

View File

@ -37,7 +37,6 @@ MA 02110-1301, USA.
this.name = "oolite-constrictor-hunt";
this.author = "Eric Walch";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
this._cleanUp = function ()
@ -166,10 +165,15 @@ this.missionScreenOpportunity = function ()
this.systemWillPopulate = function()
{
// galaxy+system parts of this check shouldn't be necessary
if (galaxyNumber === 1 &&
system.ID === 193 &&
missionVariables.conhunt === "STAGE_1")
{
// ensure all normal system population is set up first
worldScripts["oolite-populator"].systemWillPopulate();
// then add the Constrictor
system.setPopulator("oolite-constrictor-mission",
{
priority: 50,
@ -183,5 +187,17 @@ this.systemWillPopulate = function()
constrictor[0].setScript("oolite-constrictor.js");
}
});
/* Then remove most ships from the default populator which
* might attack the Constrictor. The repopulator will add more
* later. */
system.setPopulator("oolite-interceptors-witchpoint",null);
system.setPopulator("oolite-hunters-route1",null);
system.setPopulator("oolite-hunters-medium-route1",null);
system.setPopulator("oolite-hunters-medium-route3",null);
system.setPopulator("oolite-hunters-heavy-route1",null);
system.setPopulator("oolite-hunters-heavy-route3",null);
system.setPopulator("oolite-police-route1",null);
}
};

View File

@ -30,7 +30,6 @@
this.name = "oolite-constrictor-pilot";
this.author = "Eric Walch";
this.copyright = "© 2008-2010 the Oolite team.";
this.version = "1.79";
this.unloadCharacter = function ()

View File

@ -36,7 +36,6 @@ MA 02110-1301, USA.
this.name = "oolite-constrictor";
this.author = "Eric Walch";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
/*
@ -69,7 +68,8 @@ this.shipSpawned = function ()
this.shipDied = function (killer)
{
if (killer.isPlayer)
// check mission variable, just in case
if (killer && killer.isPlayer && missionVariables.conhunt === "STAGE_1")
{
missionVariables.conhunt = "CONSTRICTOR_DESTROYED";
}

View File

@ -37,7 +37,7 @@ this.name = "oolite-contracts-cargo";
this.author = "cim";
this.copyright = "© 2012-2013 the Oolite team.";
this.description = "Cargo delivery contracts.";
this.version = "1.79";
/**** Configuration options and API ****/
@ -262,6 +262,10 @@ this._initialiseCargoContractsForSystem = function()
// get the SystemInfo object for the destination
var destinationInfo = System.infoForSystem(galaxyNumber,destination);
if (destinationInfo.sun_gone_nova)
{
continue;
}
var daysUntilDeparture = 1+(Math.random()*(7+player.contractReputationPrecise-destinationInfo.government));
if (daysUntilDeparture <= 0)
@ -277,7 +281,7 @@ this._initialiseCargoContractsForSystem = function()
attempts++;
var commodity = commodities[Math.floor(Math.random()*commodities.length)];
// sub-tc contracts only available for top rep
if (system.mainStation.market[commodity].quantityUnit != 0 && player.contractReputationPrecise < 6.5)
if (system.mainStation.market[commodity]["quantity_unit"] != 0 && player.contractReputationPrecise < 6.5)
{
}
// ignore commodities with 0 availability here
@ -286,7 +290,7 @@ this._initialiseCargoContractsForSystem = function()
}
else
{
remotePrice = this._priceForCommodity(system.mainStation.market[commodity],destinationInfo.economy);
remotePrice = this._priceForCommodity(commodity,destinationInfo);
}
} while (remotePrice < system.mainStation.market[commodity].price/20 && attempts < 10);
if (attempts == 10)
@ -301,18 +305,18 @@ this._initialiseCargoContractsForSystem = function()
{
var unitsize = 1;
// larger unit sizes for kg/g commodities
if (system.mainStation.market[commodity].quantityUnit == 1)
if (system.mainStation.market[commodity]["quantity_unit"] == 1)
{
unitsize += Math.floor(Math.random()*6)+Math.floor(Math.random()*6)+Math.floor(Math.random()*6);
}
else if (system.mainStation.market[commodity].quantityUnit == 2)
else if (system.mainStation.market[commodity]["quantity_unit"] == 2)
{
unitsize += Math.floor(Math.random()*16)+Math.floor(Math.random()*11)+Math.floor(Math.random()*6);
}
amount += (1+Math.floor(Math.random()*32))*(1+Math.floor(Math.random()*16))*unitsize;
}
if (amount > 125 && system.mainStation.market[commodity].quantityUnit == 0)
if (amount > 125 && system.mainStation.market[commodity]["quantity_unit"] == 0)
{
// reduce the number of contracts only suitable for Anacondas
amount = Math.floor(amount/Math.floor(1+(Math.random()*4)));
@ -863,22 +867,21 @@ this._validateContracts = function()
/* Utility functions */
// calculates a sample price for a commodity in a distant system
this._priceForCommodity = function(commodity,economy)
this._priceForCommodity = function(commodity,systeminfo)
{
var rnd = Math.floor(Math.random()*256);
var price = 0.4*(Math.floor(parseInt(commodity.marketBasePrice,10) + (rnd & parseInt(commodity.marketMaskPrice,10)) + (economy*parseInt(commodity.marketEcoAdjustPrice,10)))&255);
return price;
//sample price returns decicredits, need credits
return systeminfo.samplePrice(commodity)/10;
}
// description of the cargo
this._descriptionForGoods = function(cargo)
{
var unit = "tons";
if (system.mainStation.market[cargo.commodity].quantityUnit == "1")
if (system.mainStation.market[cargo.commodity]["quantity_unit"] == "1")
{
unit = "kilograms";
}
else if (system.mainStation.market[cargo.commodity].quantityUnit == "2")
else if (system.mainStation.market[cargo.commodity]["quantity_unit"] == "2")
{
unit = "grams";
}
@ -894,7 +897,7 @@ this._hasSpaceFor = function(cargo)
return false;
}
var amountInTC = cargo.size;
if (system.mainStation.market[cargo.commodity].quantityUnit == "1")
if (system.mainStation.market[cargo.commodity]["quantity_unit"] == "1")
{
var spareSafe = 499-(player.ship.manifest[cargo.commodity] % 1000);
amountInTC -= spareSafe;
@ -904,7 +907,7 @@ this._hasSpaceFor = function(cargo)
amountInTC = 0;
}
}
else if (system.mainStation.market[cargo.commodity].quantityUnit == "2")
else if (system.mainStation.market[cargo.commodity]["quantity_unit"] == "2")
{
var spareSafe = 499999-(player.ship.manifest[cargo.commodity] % 1000000);
amountInTC -= spareSafe;

View File

@ -37,7 +37,59 @@ this.name = "oolite-contracts-helpers";
this.author = "cim";
this.copyright = "© 2012-2013 the Oolite team.";
this.description = "Helper functions for various contracts.";
this.version = "1.79";
/* Save and retrieve client names for use in Assassin AIs */
this.startUp = function()
{
if (missionVariables.oolite_contract_clientnames)
{
this.$clientNames = JSON.parse(missionVariables.oolite_contract_clientnames);
}
else
{
this.$clientNames = [];
for (var i=0;i<20;i++)
{
// one-time initialisation
this.$clientNames[i] = "";
}
}
}
this.playerWillSaveGame = function()
{
missionVariables.oolite_contract_clientnames = JSON.stringify(this.$clientNames);
}
// set a client name in the random selection
this._setClientName = function(name)
{
this.$clientNames[Math.floor(Math.random()*20)] = name;
}
// get a random recent (usually) client name
this._getClientName = function()
{
var idx = Math.floor(Math.random()*20);
for (var i=0;i<20;i++)
{
var name = this.$clientNames[(idx+i)%20];
if (name != "")
{
return name;
}
}
// being requested when no clients recorded, ever!
// unlikely but might happen
return expandDescription("%N ")+expandDescription("[nom]");
}
// returns a string containing the necessary number of "hair spaces" to
// pad the currentText string to the specified length in 'em'

View File

@ -37,7 +37,6 @@ this.name = "oolite-contracts-parcels";
this.author = "cim";
this.copyright = "© 2012-2013 the Oolite team.";
this.description = "Parcel delivery contracts.";
this.version = "1.79";
/**** Configuration options and API ****/
@ -288,6 +287,11 @@ this._initialiseParcelContractsForSystem = function()
// get the SystemInfo object for the destination
var destinationInfo = System.infoForSystem(galaxyNumber,destination);
if (destinationInfo.sun_gone_nova)
{
continue;
}
// check that a route to the destination exists
var routeToDestination = system.info.routeToSystem(destinationInfo);
@ -346,13 +350,18 @@ this._initialiseParcelContractsForSystem = function()
var prudence = (2*Math.random())-1;
var desperation = (Math.random()*(0.5+parcel.risk)) * (1+1/(Math.max(0.5,dtime-(routeToDestination.time * 3600))));
var competency = Math.max(50,(routeToDestination.route.length-1)*(1+(parcel.risk*2)));
var competency = Math.max(50,(routeToDestination.route.length-1)*(0.5+(parcel.risk*2)));
if(parcel.risk == 0)
{
competency -= 10;
competency -= 30;
}
parcel.payment = Math.floor(parcel.payment * (1+(0.4*prudence)));
parcel.payment += (parcel.risk * 200);
if (parcel.payment < 100)
{
competency -= 15;
// paying this little probably can't ask for anyone good
}
parcel.skill = competency + 20*(prudence-desperation);
}
else
@ -360,6 +369,13 @@ this._initialiseParcelContractsForSystem = function()
parcel.skill = -1; // always available
}
if (parcel.skill > 60)
{
parcel.skill = 60;
}
// log(this.name,parcel.payment,parcel.skill,parcel.risk);
// add parcel to contract list
this._addParcelToSystem(parcel);
}
@ -770,6 +786,18 @@ this._acceptContract = function()
"oolite-parcel-contents" : this._formatPackageName(parcel.description)
});
player.ship.addParcel(desc,system.ID,parcel.destination,parcel.deadline,parcel.payment,0,parcel.risk);
if (parcel.risk > 0)
{
// once for medium risk
worldScripts["oolite-contracts-helpers"]._setClientName(parcel.sender);
if (parcel.risk > 1)
{
// three times for high risk
worldScripts["oolite-contracts-helpers"]._setClientName(parcel.sender);
worldScripts["oolite-contracts-helpers"]._setClientName(parcel.sender);
}
}
// remove the parcel from the station list
this.$parcels.splice(this.$contractIndex,1);

View File

@ -37,7 +37,6 @@ this.name = "oolite-contracts-passengers";
this.author = "cim";
this.copyright = "© 2012-2013 the Oolite team.";
this.description = "Parcel delivery contracts.";
this.version = "1.79";
/**** Configuration options and API ****/
@ -260,6 +259,11 @@ this._initialisePassengerContractsForSystem = function()
// get the SystemInfo object for the destination
var destinationInfo = System.infoForSystem(galaxyNumber,destination);
if (destinationInfo.sun_gone_nova)
{
continue;
}
var daysUntilDeparture = 1+(Math.random()*(7+player.passengerReputationPrecise-destinationInfo.government));
if (daysUntilDeparture <= 0)
{
@ -294,13 +298,43 @@ this._initialisePassengerContractsForSystem = function()
if (passenger.species.match(new RegExp(expandDescription("[human-word]"),"i")))
{
passenger.name = expandDescription("%R ")+expandDescription("[nom]");
passenger.name = expandDescription("%N ")+expandDescription("[nom]");
}
else
{
passenger.name = randomName()+" "+randomName();
}
/* Because passengers with duplicate names won't be accepted,
* check for name duplication with either other passengers
* here or other passengers carried by the player, and adjust
* this passenger's name a little if there's a match */
do {
var okay = true;
for (var j=0;j<player.ship.passengers.length;j++)
{
if (player.ship.passengers[j].name == passenger.name)
{
okay = false;
break;
}
}
if (okay) {
for (var j=0;j<this.$passengers.length;j++)
{
if (this.$passengers[j].name == passenger.name)
{
okay = false;
break;
}
}
}
if (!okay) {
passenger.name += "a";
}
} while (!okay);
passenger.risk = Math.floor(Math.random()*3);
passenger.species = expandDescription("[passenger-description-risk"+passenger.risk+"]")+" "+passenger.species;
@ -327,18 +361,20 @@ this._initialisePassengerContractsForSystem = function()
var prudence = (2*Math.random())-1;
var desperation = (Math.random()*(0.5+passenger.risk)) * (1+1/(Math.max(0.5,dtime-(routeToDestination.time * 3600))));
var competency = Math.max(50,(routeToDestination.route.length-1)*(1+(passenger.risk*2)));
var competency = Math.max(50,(routeToDestination.route.length-1)*(0.5+(passenger.risk*2)));
if(passenger.risk == 0)
{
competency -= 10;
competency -= 30;
}
passenger.payment = Math.floor(passenger.payment * (1+(0.4*prudence)));
passenger.payment += (passenger.risk * 200);
passenger.skill = competency + 20*(prudence-desperation);
passenger.skill = Math.min(60,competency + 20*(prudence-desperation));
passenger.advance = Math.min(passenger.payment*0.9,Math.max(0,Math.floor(passenger.payment * (0.05 + (0.1*desperation) + (0.02*player.passengerReputationPrecise))))); // some% up front
passenger.payment -= passenger.advance;
// log(this.name,passenger.payment,passenger.skill,passenger.risk);
// add passenger to contract list
this._addPassengerToSystem(passenger);
}
@ -775,30 +811,43 @@ this._processPassengerChoice = function(choice)
// move a passenger from the contracts list to the player's ship (if possible)
this._acceptContract = function()
{
var passenger = this.$passengers[this.$contractIndex];
var passenger = this.$passengers[this.$contractIndex];
// give the passenger to the player
var result = player.ship.addPassenger(passenger.name,system.ID,passenger.destination,passenger.deadline,passenger.payment,passenger.advance);
if (result)
// give the passenger to the player
var result = player.ship.addPassenger(passenger.name,system.ID,passenger.destination,passenger.deadline,passenger.payment,passenger.advance,passenger.risk);
if (result)
{
// pay the advance
player.credits += passenger.advance;
// remove the passenger from the station list
this.$passengers.splice(this.$contractIndex,1);
// update the interface description
this._updateMainStationInterfacesList();
this.$helper._soundSuccess();
if (passenger.risk > 0)
{
// pay the advance
player.credits += passenger.advance;
// remove the passenger from the station list
this.$passengers.splice(this.$contractIndex,1);
// update the interface description
this._updateMainStationInterfacesList();
this.$helper._soundSuccess();
}
else
{
// else must have had another passenger board recently
// (unlikely, but another OXP could have done it)
this.$helper._soundFailure();
// once for medium risk
worldScripts["oolite-contracts-helpers"]._setClientName(passenger.name);
if (passenger.risk > 1)
{
// three times for high risk
worldScripts["oolite-contracts-helpers"]._setClientName(passenger.name);
worldScripts["oolite-contracts-helpers"]._setClientName(passenger.name);
}
}
}
else
{
// else must have had another passenger board recently
// (unlikely, but another OXP could have done it)
this.$helper._soundFailure();
}
}

View File

@ -36,6 +36,5 @@ this.name = "oolite-default-effect-script";
this.author = "cim";
this.copyright = "© 2012-2013 the Oolite team.";
this.description = "Standard script for effects.";
this.version = "1.79";
// this script does not define default behaviours for any handlers.

View File

@ -34,4 +34,3 @@ this.name = "oolite-default-player-script";
this.author = "Jens Ayton";
this.description = "Standard script for player ship.";
this.copyright = "© 2007-2013 the Oolite team.";
this.version = "1.79";

View File

@ -36,7 +36,6 @@ this.name = "oolite-default-ship-script";
this.author = "Jens Ayton";
this.copyright = "© 2007-2013 the Oolite team.";
this.description = "Standard script for ships.";
this.version = "1.79";
// launch_actions handled on shipSpawned(). For parity with 1.65, launch_actions dont fire for the main station.

View File

@ -0,0 +1,230 @@
/*
oolite-equipment-control.js
World script handling equipment effects
Oolite
Copyright © 2004-2013 Giles C Williams and contributors
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., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
*/
/*jslint white: true, undef: true, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */
/*global worldScripts*/
"use strict";
this.name = "Oolite Equipment Control";
this.description = "This script moves control over certain Oolite equipment items into Javascript to make it more practical for OXPs to vary the effects.";
this.author = "cim";
this.copyright = "© 2014-2015 the Oolite team.";
this.$baseline = {};
this.$started = false;
/* Initialise baseline data and equipment */
this.startUp = function()
{
if (this.startUp)
{
delete this.startUp;
}
// initialise equipment
this.playerBoughtNewShip();
/* Maximum cargo space is already in the save game, so don't
* enable these functions until after startup, or it'll get
* repeatedly applied.
*
* Note: the cargo bay can't be damaged in the core game
* anyway. The removal function is moderately complex just in case
* an OXP offers a way to remove the cargo bay without first doing
* validation that this can be done.
*
* Also may provide a model for conditional removals elsewhere
* (though validation before calling removeEquipment is again the
* correct approach). Checks here should only be necessary as a
* failsafe.
*/
this.$equipmentEnable["EQ_CARGO_BAY"] = function(item)
{
player.ship.cargoSpaceCapacity += player.ship.extraCargo;
};
this.$equipmentDisable["EQ_CARGO_BAY"] = function(item)
{
if (player.ship.cargoSpaceAvailable < player.ship.extraCargo)
{
/* can't disable this equipment could try throwing out
* cargo, but this isn't guaranteed to work because there
* might be equipment taking up more than the base space. */
// so save the current capacity
var cap = player.ship.cargoSpaceCapacity;
// add the cargo extension back
log(this.name,"The large cargo bay was removed when there wasn't enough spare space to contain it. This is probably due to an OXP failing to validate cargo bay removal before trying it. The cargo bay has been restored to prevent inconsistencies.");
// then reset the cargo space to the right amount
player.ship.cargoSpaceCapacity = cap;
// and stop
return -1; // doesn't disable this function
}
player.ship.cargoSpaceCapacity -= player.ship.extraCargo;
};
};
this.playerBoughtNewShip = function()
{
this.$started = true;
this.$baseline.maxEnergy = player.ship.maxEnergy;
this.$baseline.energyRechargeRate = player.ship.energyRechargeRate;
this.$baseline.maxForwardShield = player.ship.maxForwardShield;
this.$baseline.maxAftShield = player.ship.maxAftShield;
this.$baseline.forwardShieldRechargeRate = player.ship.forwardShieldRechargeRate;
this.$baseline.aftShieldRechargeRate = player.ship.aftShieldRechargeRate;
this.$baseline.heatInsulation = player.ship.heatInsulation;
var eq = player.ship.equipment;
this.$equipmentEnabled = {};
for (var i=0; i<eq.length; i++) {
// reinitialise equipment already on ship
this.equipmentAdded(eq[i].equipmentKey);
}
};
/* Remove equipment effects */
this.equipmentRemoved = function(equip)
{
if (!this.$started)
{
return;
}
if (this.$equipmentEnabled[equip])
{
if (this.$equipmentDisable[equip])
{
var info = EquipmentInfo.infoForKey(equip);
log(this.name,"Disabling "+info.equipmentKey); //tmp - remove later
var result = this.$equipmentDisable[equip].bind(this,info)();
if (result == -1)
{
return;
}
}
}
this.$equipmentEnabled[equip] = 0;
};
/* Add equipment effects */
this.equipmentAdded = function(equip)
{
if (!this.$started)
{
return;
}
if (!this.$equipmentEnabled[equip])
{
if (this.$equipmentEnable[equip])
{
var info = EquipmentInfo.infoForKey(equip);
log(this.name,"Enabling "+info.equipmentKey); //tmp - remove later
var result = this.$equipmentEnable[equip].bind(this,info)();
if (result == -1)
{
return;
}
}
}
this.$equipmentEnabled[equip] = 1;
};
/* This object prevents duplicate enabling/disabling of items. Do not
* edit directly. */
this.$equipmentEnabled = {};
/* These objects get filled with control methods. Each control method
* may be individually overridden by an OXP if necessary, and
* additional methods for OXP equipment may be added. */
this.$equipmentEnable = {};
this.$equipmentDisable = {};
/* Methods for handling shield boosters / military shield boosters */
this.$equipmentEnable["EQ_SHIELD_BOOSTER"] = this.$equipmentEnable["EQ_NAVAL_SHIELD_BOOSTER"] = function(info)
{
player.ship.maxForwardShield += parseFloat(info.scriptInfo.oolite_shield_increase);
player.ship.maxAftShield += parseFloat(info.scriptInfo.oolite_shield_increase);
player.ship.forwardShieldRechargeRate *= parseFloat(info.scriptInfo.oolite_shield_recharge_multiplier);
player.ship.aftShieldRechargeRate *= parseFloat(info.scriptInfo.oolite_shield_recharge_multiplier);
if (player.ship.docked)
{
player.ship.aftShield = player.ship.maxAftShield;
player.ship.forwardShield = player.ship.maxForwardShield;
}
};
this.$equipmentDisable["EQ_SHIELD_BOOSTER"] = this.$equipmentDisable["EQ_NAVAL_SHIELD_BOOSTER"] = function(info)
{
player.ship.maxForwardShield -= parseFloat(info.scriptInfo.oolite_shield_increase);
player.ship.maxAftShield -= parseFloat(info.scriptInfo.oolite_shield_increase);
player.ship.forwardShieldRechargeRate /= parseFloat(info.scriptInfo.oolite_shield_recharge_multiplier);
player.ship.aftShieldRechargeRate /= parseFloat(info.scriptInfo.oolite_shield_recharge_multiplier);
if (player.ship.docked)
{
player.ship.aftShield = player.ship.maxAftShield;
player.ship.forwardShield = player.ship.maxForwardShield;
}
};
/* Methods for handling (naval) energy units */
this.$equipmentEnable["EQ_ENERGY_UNIT"] = this.$equipmentEnable["EQ_NAVAL_ENERGY_UNIT"] = function(info)
{
var eboost = (parseFloat(info.scriptInfo.oolite_energy_recharge_multiplier)-1.0)*this.$baseline.energyRechargeRate;
player.ship.energyRechargeRate += eboost;
};
this.$equipmentDisable["EQ_ENERGY_UNIT"] = this.$equipmentDisable["EQ_NAVAL_ENERGY_UNIT"] = function(info)
{
var eboost = (parseFloat(info.scriptInfo.oolite_energy_recharge_multiplier)-1.0)*this.$baseline.energyRechargeRate;
player.ship.energyRechargeRate -= eboost;
};
/* Methods for handling heat shielding */
this.$equipmentEnable["EQ_HEAT_SHIELD"] = function(info)
{
player.ship.heatInsulation += parseFloat(info.scriptInfo.oolite_heat_insulation_strength);
};
this.$equipmentDisable["EQ_HEAT_SHIELD"] = function(info)
{
player.ship.heatInsulation -= parseFloat(info.scriptInfo.oolite_heat_insulation_strength);
};

View File

@ -46,7 +46,6 @@ MA 02110-1301, USA.
this.name = "oolite-global-prefix";
this.author = "Jens Ayton";
this.copyright = "© 2009-2013 the Oolite team.";
this.version = "1.79";
(function (special) {

View File

@ -35,7 +35,6 @@ MA 02110-1301, USA.
this.name = "oolite-locale-functions";
this.author = "Jens Ayton";
this.copyright = "© 2012-2013 the Oolite team.";
this.version = "1.79";
(function () {

View File

@ -36,7 +36,6 @@ MA 02110-1301, USA.
this.name = "oolite-nova";
this.author = "Eric Walch, Jens Ayton, Kaks";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
this._endTheMission = function ()
@ -153,12 +152,12 @@ this._flareTransition = function(delta)
current -= delta/10;
}
system.info.corona_flare = current;
if (this._flareTarget > 0.375 && current > this._flareTarget)
if (this._flareTarget > 0.275 && current > this._flareTarget)
{
removeFrameCallback(this._flareCallback);
delete this._flareCallback;
}
else if (this._flareTarget < 0.375 && current < this._flareTarget)
else if (this._flareTarget < 0.275 && current < this._flareTarget)
{
removeFrameCallback(this._flareCallback);
delete this._flareCallback;
@ -237,7 +236,7 @@ this.missionScreenOpportunity = function ()
messageKey: "oolite_nova_hero",
background: "solar.png"
});
player.ship.manifest["gem-stones"] += 100;
player.ship.manifest["gem_stones"] += 100;
this._endTheMission();
}
else if (missionVariables.nova === "NOVA_ESCAPE_POD")
@ -296,7 +295,11 @@ this.shipWillEnterWitchspace = function ()
if (this.willGoNova)
{
system.info.sun_gone_nova = true;
system.info.sun_radius = this._novaRadius;
system.info.corona_flare = 0.3;
system.info.corona_hues = 0.05;
delete this.willGoNova;
delete this._novaRadius;
// did the player leave the nova system without docking at the main station?
if (missionVariables.nova === "TWO_HRS_TO_ZERO")
{
@ -317,8 +320,8 @@ this.shipWillExitWitchspace = function ()
// the populator has started the nova mission
player.ship.fuelLeakRate = 25;
this.willGoNova = true;
this._novaRadius = system.sun.radius + 600000;
player.consoleMessage(expandDescription("[danger-fuel-leak]"), 4.5);
system.info.market = "none";
this.buoyLoaded = false; // w-bouy is not in system yet.
if (this.novaMissionTimer)
{
@ -345,6 +348,9 @@ this.systemWillPopulate = function() // call this as soon as possible so other s
{
missionVariables.nova = "TWO_HRS_TO_ZERO";
system.sun.goNova(7200);
if (system.info.corona_flare < 0.15) {
system.info.corona_flare = 0.15;
}
/* the main populator script might have run first. If so, remove
* the ships it added. If it runs after, it'll notice the
* impending nova and not add these lines in the first place */

View File

@ -36,19 +36,74 @@ MA 02110-1301, USA.
this.name = "oolite-populator";
this.author = "cim";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
this.startUp = function()
{
// for translations
/* For translations: the Moray Medical Boat gets different cargo */
this.$medicalReg = new RegExp(expandDescription("[medical-word]"),"i");
/* The global level of bias in weapon selection. A few useful
* threshold values if modifying this:
*
* 0: default weapon selection
*
* 0.2: above this military lasers start being granted to rare ships
*
* 1.2: above this aft military lasers start appearing; forward
* military/aft beam is common
*
* -0.8: no ships have aft beam laser; forward beam is rare
*
* -1.8: no ships have beam lasers
*
* A few ships (e.g. police ships) do not have variable lasers and
* are not affected by this setting.
*/
this.$weaponLevelBias = 0;
/* The global level of bias in AI skill selection. Per-ship bias
* varies between +3 and -3. Ships with accuracy already >= 5 are
* not affected by this biasing.
*
* At -3, no ships will get an accuracy higher than the random
* -5..5 they spawned with; at +3 no ships will get an accuracy
* lower than that.
*
* Regardless of this parameter,
*/
this.$skillLevelBias = 0;
/* The maximum accuracy a ship can be granted by skill
* biasing. Values >10 can be set and will make it more likely
* that any ship with positive skill bias will get accuracy
* 10. Setting a negative value here will have odd results.
*/
this.$skillLevelMaximum = 4.99;
// internal variables; do not modify outside this script
this.$populatorRun = 0;
delete this.startUp;
}
/* This allows this.systemWillPopulate to be called by scripts running
* before it, so that its entries are in place before they try to
* modify them. Generally useful if you want to modify the basic
* system population. */
this.shipWillEnterWitchspace = function()
{
this.$populatorRun = 0; // reset variable after all population complete
}
/* Basic system population */
this.systemWillPopulate = function()
{
if (this.$populatorRun)
{
return;
}
/* Priority range 0-99 used by Oolite default populator */
// anything added here with priority > 20 will be cancelled by the
@ -66,6 +121,7 @@ this.systemWillPopulate = function()
var nb = system.addShips("buoy",1,pos,0)[0];
nb.scanClass = "CLASS_BUOY";
nb.reactToAIMessage("START_TUMBLING");
nb.beaconLabel = "[oolite-beacon-label-station]";
},
deterministic: true
});
@ -79,6 +135,7 @@ this.systemWillPopulate = function()
var wb = system.addShips("buoy-witchpoint",1,pos,0)[0];
wb.scanClass = "CLASS_BUOY";
wb.reactToAIMessage("START_TUMBLING");
wb.beaconLabel = "[oolite-beacon-label-witchpoint]";
},
deterministic: true
});
@ -96,9 +153,20 @@ this.systemWillPopulate = function()
// don't add rock hermits if the sun is about to explode
if (hermit && !system.sun.isGoingNova)
{
var rh = system.addShips("rockhermit",1,pos,0)[0];
var allegiance = this._hermitAllegiance(pos,system.info.government);
var role = "rockhermit";
if (allegiance == "chaotic")
{
role = "rockhermit-chaotic";
}
else if (allegiance == "pirate")
{
role = "rockhermit-pirate";
}
var rh = system.addShips(role,1,pos,0)[0];
rh.scanClass = "CLASS_ROCK";
rh.allegiance = this._hermitAllegiance(pos,system.info.government);
}
}.bind(this);
@ -129,11 +197,20 @@ this.systemWillPopulate = function()
locationSeed: 71258,
groupCount: 1,
callback: function(pos) {
if (system.countShipsWithPrimaryRole("rockhermit")==0) {
var rh = system.addShips("rockhermit",1,pos,0)[0];
rh.scanClass = "CLASS_ROCK";
rh.allegiance = this._hermitAllegiance(pos,system.info.government);
if (system.countShipsWithPrimaryRole("rockhermit")+system.countShipsWithPrimaryRole("rockhermit-chaotic")+system.countShipsWithPrimaryRole("rockhermit-pirate")==0) {
var allegiance = this._hermitAllegiance(pos,system.info.government);
var role = "rockhermit";
if (allegiance == "chaotic")
{
role = "rockhermit-chaotic";
}
else if (allegiance == "pirate")
{
role = "rockhermit-pirate";
}
var rh = system.addShips(role,1,pos,0)[0];
// just the hermit, no other rocks
rh.scanClass = "CLASS_ROCK";
}
}.bind(this),
deterministic: true
@ -629,14 +706,6 @@ this.systemWillPopulate = function()
// hunters
// 5/6 go route 1, and back. 50% faster ships than traders, on average
initial = hlight * 5/6 * (l1length*2 / 900000) * (1.0-0.1*(7-system.info.government));
system.setPopulator("oolite-hunters-route1",
{
priority: 40,
location: "LANE_WP",
groupCount: randomise(initial),
callback: this._addLightHunter.bind(this)
});
initial = hlight * 1/6 * (trilength / 900000) * (1.0-0.1*(7-system.info.government));
system.setPopulator("oolite-hunters-triangle",
{
@ -645,6 +714,14 @@ this.systemWillPopulate = function()
groupCount: randomise(initial),
callback: this._addLightHunter.bind(this)
});
initial = hlight * 5/6 * (l1length*2 / 900000) * (1.0-0.1*(7-system.info.government));
system.setPopulator("oolite-hunters-route1",
{
priority: 40,
location: "LANE_WP",
groupCount: randomise(initial),
callback: this._addLightHunter.bind(this)
});
initial = hmedium * l1length/900000 * (2/3) * 2/3;
system.setPopulator("oolite-hunters-medium-route1",
{
@ -783,6 +860,7 @@ this.systemWillPopulate = function()
});
// assassins
initial = assassins;
var maxas = 2;
if (system.info.government < 3)
{
// if carrying high-risk contracts through dangerous systems,
@ -799,6 +877,7 @@ this.systemWillPopulate = function()
}
if (cs[i].risk == 2 && Math.random() < 0.5)
{
maxas += 2;
initial++;
}
}
@ -820,6 +899,7 @@ this.systemWillPopulate = function()
}
if (cs[i].risk == 2 && Math.random() < 0.5)
{
maxas += 2;
initial++;
}
}
@ -829,11 +909,21 @@ this.systemWillPopulate = function()
}
}
}
var agc = randomise(initial);
/* Because the assassin groups all appear at the witchpoint it can
* end up ridiculously populated in certain systems. Cap the
* number of initial assassin groups at 2, unless the player is
* carrying high-risk items, in which case they deserve whatever
* shows up for jumping into an Anarchy bottleneck. */
if (agc > maxas)
{
agc = maxas;
}
system.setPopulator("oolite-assassins",
{
priority: 40,
location: "WITCHPOINT",
groupCount: randomise(initial),
groupCount: agc,
callback: this._addAssassin.bind(this)
});
@ -936,7 +1026,7 @@ this.systemWillPopulate = function()
this._debugP("Thargoid (ST)",pset["oolite-thargoid-strike"].groupCount);
// and the initial ships are done...
this.$populatorRun = 1;
}
@ -1226,6 +1316,10 @@ this.systemWillRepopulate = function()
this.interstellarSpaceWillPopulate = function()
{
if (this.$populatorRun)
{
return;
}
system.setPopulator("oolite-interstellar-thargoids",
{
priority: 10,
@ -1235,20 +1329,24 @@ this.interstellarSpaceWillPopulate = function()
system.addShips("thargoid",1,pos,0);
}
});
this.$populatorRun = 1;
}
this.interstellarSpaceWillRepopulate = function()
{
if (system.countShipsWithPrimaryRole("thargoid") < 2)
if (Math.random() < 0.25)
{
if (Math.random() > 0.01)
if (system.countShipsWithPrimaryRole("thargoid") < 3)
{
system.addShips("thargoid",1,[0,0,0],25600);
}
else
{
// everyone's getting ambushed today
system.addShips("trader",1,[0,0,0],6400);
if (Math.random() > 0.05)
{
system.addShips("thargoid",1+Math.floor(Math.random()*3),[0,0,0],25600);
}
else
{
// everyone's getting ambushed today
system.addShips("trader",1,[0,0,0],6400);
}
}
}
}
@ -1257,6 +1355,10 @@ this.interstellarSpaceWillRepopulate = function()
this.novaSystemWillPopulate = function()
{
if (this.$populatorRun)
{
return;
}
// just burnt-out rubble
system.setPopulator("oolite-nova-cinders",
{
@ -1269,7 +1371,7 @@ this.novaSystemWillPopulate = function()
system.addShips("cinder",10,pos,25600);
}
});
this.$populatorRun = 1;
}
@ -1296,6 +1398,7 @@ this._addFreighter = function(pos)
t[0].homeSystem = system.ID;
t[0].destinationSystem = this._weightedNearbyTradeSystem();
goods = "PLENTIFUL_GOODS";
t[0].fuel = 7;
}
else
{
@ -1323,9 +1426,15 @@ this._addFreighter = function(pos)
{
t[0].bounty = Math.ceil(Math.random()*20);
// half of the offender traders are a bit more sinister
if (Math.random() < 0.5)
// can only happen with ships which allow autoAI
if (Math.random() < 0.5 && t[0].autoAI)
{
t[0].switchAI("oolite-traderOpportunistAI.js");
if (t[0].autoWeapons)
{
this._setSkill(t[0],2); // need to be decent pilots to make this work
this._setWeapons(t[0],2.5); // boost weapons
}
goods = "PIRATE_GOODS";
}
var eg = t[0].escortGroup.ships;
@ -1495,13 +1604,13 @@ this._addMediumHunterRemote = function(pos)
this._addMediumHunterReturn = function(pos)
{
this._addHunterPack(pos,system.ID,this._nearbyDangerousSystem(1),"hunter-medium",true);
this._addHunterPack(pos,system.ID,this._nearbyDangerousSystem(4),"hunter-medium",true);
}
this._addMediumHunterOutbound = function(pos)
{
this._addHunterPack(pos,system.ID,this._nearbyDangerousSystem(1),"hunter-medium",false);
this._addHunterPack(pos,system.ID,this._nearbyDangerousSystem(4),"hunter-medium",false);
}
@ -1537,6 +1646,8 @@ this._addHunterPack = function(pos,home,dest,role,returning)
{
t[0].bounty = 0;
t[0].homeSystem = home;
t[0].destinationSystem = dest;
if (returning)
{
this._setMissiles(t[0],-1);
@ -1547,8 +1658,6 @@ this._addHunterPack = function(pos,home,dest,role,returning)
this._setFuel(t[0]);
}
t[0].destinationSystem = dest;
var group = new ShipGroup("hunter group",t[0]);
t[0].group = group;
@ -1578,7 +1687,12 @@ this._addHunterPack = function(pos,home,dest,role,returning)
this._setWeapons(t[0],1.9);
}
this._setSkill(t[0],3); // likely to be good pilot
t[0].switchAI("oolite-bountyHunterLeaderAI.js");
if (t[0].autoAI)
{
t[0].switchAI("oolite-bountyHunterLeaderAI.js");
// auto AI will normally get this already but not if the hunter
// addition used fallback roles
}
}
}
@ -1638,7 +1752,14 @@ this._addPirateAssistant = function(role,lead,pos)
asst[0].destinationSystem = lead.destinationSystem;
if (role == "pirate-interceptor")
{
asst[0].switchAI("oolite-pirateInterceptorAI.js");
// autoAI gets this (except if we've fallen back to generic
// pirates) once OXPs have caught up and we can be confident
// that the new roles will be available, this can be
// simplified.
if (asst[0].autoAI)
{
asst[0].switchAI("oolite-pirateInterceptorAI.js");
}
asst[0].setBounty(50+system.government+Math.floor(Math.random()*36),"setup actions");
// interceptors not actually part of group: they just get the
// same destinations
@ -1652,7 +1773,12 @@ this._addPirateAssistant = function(role,lead,pos)
{
asst[0].group = lead.group;
lead.group.addShip(asst[0]);
asst[0].switchAI("oolite-pirateFighterAI.js");
// autoAI gets this (except if we've fallen back to generic
// pirates - see above)
if (asst[0].autoAI)
{
asst[0].switchAI("oolite-pirateFighterAI.js");
}
asst[0].setBounty(20+system.government+Math.floor(Math.random()*12),"setup actions");
if (role == "pirate-light-fighter")
{
@ -1741,7 +1867,11 @@ this._addPiratePack = function(pos,leader,lf,mf,hf,thug,home,destination,returni
lead[0].setCargoType("PIRATE_GOODS");
}
this._setEscortWeapons(lead[0]);
lead[0].switchAI("oolite-pirateFreighterAI.js");
if (lead[0].autoAI)
{
// may have fallen back to generic 'pirate' role, so make sure
lead[0].switchAI("oolite-pirateFreighterAI.js");
}
return lead[0];
}
@ -1881,36 +2011,41 @@ this._addAssassin = function(pos)
{
main.awardEquipment("EQ_SHIELD_BOOSTER");
}
// assassins don't respect escape pods and won't expect anyone
// else to either.
main.removeEquipment("EQ_ESCAPE_POD");
main.fuel = 7;
this._setWeapons(main,ws);
this._setSkill(main,extra);
}
// main.bounty = 1+Math.floor(Math.random()*10);
main.switchAI("oolite-assassinAI.js");
// main.switchAI("oolite-assassinAI.js"); // autoAI can get this
if (extra > 0)
{
var g = new ShipGroup("assassin group",main);
main.group = g;
var numext = Math.floor(Math.random()*3)+1;
if (role == "assassin-heavy")
{
var extras = this._addShips("assassin-medium",2,pos,3E3);
var extras = this._addShips("assassin-medium",numext,pos,3E3);
}
else
{
var extras = this._addShips("assassin-light",2,pos,3E3);
var extras = this._addShips("assassin-light",numext,pos,3E3);
}
for (var i=0;i<2;i++)
for (var i=0;i<numext;i++)
{
extras[i].group = g;
g.addShip(extras[i]);
if (extras[i].autoWeapons)
{
extras[i].awardEquipment("EQ_FUEL_INJECTION");
extras[i].removeEquipment("EQ_ESCAPE_POD");
extras[i].fuel = 7;
this._setWeapons(extras[i],1.8);
}
// extras[i].bounty = 1+Math.floor(Math.random()*5);
extras[i].switchAI("oolite-assassinAI.js");
// extras[i].switchAI("oolite-assassinAI.js");
}
}
}
@ -1953,7 +2088,7 @@ this._addPoliceStationPatrol = function(pos)
p.primaryRole = "police-station-patrol";
p.group = system.mainStation.group;
p.group.addShip(p);
p.switchAI("oolite-policeAI.js");
// p.switchAI("oolite-policeAI.js");// autoAI gets this
p.bounty = 0;
p.maxEscorts = 16;
if (system.info.techlevel >= 14)
@ -1974,7 +2109,7 @@ this._addInterceptors = function(pos)
h.ships[i].maxEscorts = 16;
h.ships[i].homeSystem = system.ID;
h.ships[i].destinationSystem = system.ID;
h.ships[i].switchAI("oolite-policeAI.js");
// h.ships[i].switchAI("oolite-policeAI.js"); // auto AI
// only +1 as core already gives police ships better AI
this._setSkill(h.ships[i],1);
@ -2079,6 +2214,7 @@ this._setEscortWeapons = function(mothership)
*/
this._setWeapons = function(ship,level)
{
level += this.$weaponLevelBias;
if (!ship.autoWeapons)
{
// default is not to change anything
@ -2137,10 +2273,11 @@ this._setWeapons = function(ship,level)
this._setSkill = function(ship,bias)
{
bias += this.$skillLevelBias;
if (ship.autoWeapons && ship.accuracy < 5 && bias != 0)
{
// shift skill towards end of accuracy range
var target = 4.99;
var target = this.$skillLevelMaximum;
if (bias < 0)
{
target = -5;
@ -2209,7 +2346,7 @@ this._setReturnFuel = function(ship)
this._wormholePos = function()
{
var v = Vector3D.randomDirection().multiply(2000+Math.random()*3000);
if (v.z < 0 && v.x+v.y < 500)
if (v.z < 0 && Math.abs(v.x)+Math.abs(v.y) < 1000)
{
v.z = -v.z; // avoid collision risk with witchbuoy
}
@ -2474,28 +2611,55 @@ this._weightedNearbyTradeSystem = function()
}
}
// fallback
if (locals.length > 0)
{
return locals[0].systemID;
}
return system.ID;
}
/* Station selectors */
this._launchReady = function(station)
{
var docks = station.subEntities;
var space = 0;
for (var i=0; i<docks.length;i++)
{
if (docks[i].isDock)
{
space += 16 - docks[i].launchingQueueLength;
}
}
// log("station.debug",station.displayName+" has "+space +" in docking queue");
return (space >= 8);
}
// station for launching traders
this._tradeStation = function(usemain)
{
// usemain biases, but does not guarantee or forbid
if (usemain && Math.random() < 0.67)
if (usemain && Math.random() < 0.67 && this._launchReady(system.mainStation))
{
return system.mainStation;
}
var stats = system.stations;
var stat = system.stations[Math.floor(Math.random()*stats.length)];
if (stat.hasNPCTraffic)
var tries = 0;
do
{
if (stat.allegiance == "neutral" || stat.allegiance == "galcop" || stat.allegiance == "chaotic")
var stat = system.stations[Math.floor(Math.random()*stats.length)];
if (stat.hasNPCTraffic)
{
return stat;
if (stat.allegiance == "neutral" || stat.allegiance == "galcop" || stat.allegiance == "chaotic")
{
if (this._launchReady(stat))
{
return stat;
}
}
}
}
} while (tries < 5 && tries < stats.length);
return system.mainStation;
}
@ -2508,7 +2672,10 @@ this._pirateLaunch = function()
{
if (stat.allegiance == "pirate" || stat.allegiance == "chaotic")
{
return stat;
if (this._launchReady(stat))
{
return stat;
}
}
}
return system.mainPlanet;
@ -2524,7 +2691,10 @@ this._hunterLaunch = function()
{
if (stat.allegiance == "hunter" || stat.allegiance == "galcop")
{
return stat;
if (this._launchReady(stat))
{
return stat;
}
}
}
return system.mainStation;
@ -2540,7 +2710,10 @@ this._policeLaunch = function()
{
if (stat.allegiance == "galcop")
{
return stat;
if (this._launchReady(stat))
{
return stat;
}
}
}
return system.mainStation;

View File

@ -36,7 +36,7 @@ MA 02110-1301, USA.
this.name = "oolite-primable-equipment-register";
this.author = "cim";
this.copyright = "© 2008-2013 the Oolite team.";
this.version = "1.79";
this.startUpComplete = this.shipDockedWithStation = this.playerBoughtNewShip = function()
{

Some files were not shown because too many files have changed in this diff Show More