[an error occurred while processing this directive]
[an error occurred while processing this directive]
New Year's Day 2001 MindRover Wishlist:
NOTE:
The following describes some suggested features for a new MindRover
with the fictitious version of "Q" -
but as though they already existed.
This is an illusion, but makes for nice copy. :-)
New General Game Features
Unlimited Simultaneous Rovers
MindRoverQ allows the player to put as many rovers together in one
environment as he (or she) has the hardware to support, based on the
precept that some end users are more interested in having a lot of
units than they are in the framerate, and may be running on far better
hardware than that on which the game was developed. This also open the
door to serious experimentation with inter-rover radio components.
If running 371 of the little buggers together seems a little slow, or
fails to start with a complaint resembling "Insufficient memory
for 371 rovers with total of 15971 components", then just scale
back the vehicle list or use simpler vehicles.
As a convenience feature, the vehicle screen include the number of
components of each vehicle in its listing.
Scenario Rover Count Limits
In MindRoverQ, scenario rover maximums are suggestions only.
The actual maximum number of rovers in a given environment is limited
only by systems resources.
Note, however, that a given scenario will
only be checked off as being completed if the suggested rover maximum,
and any minimum given, is adhered to.
Arbitrarily Named Teams
- The player can enter an arbitrary team name for each rover during setup on
the Vehicle screen.
- MindRoverQ2 will group the rovers into teams by name.
- There is no limit to the number of teams.
- See the section on Rover Skinning for how team names affect
rover coloration.
Campaign-Style Scenarios
The following scenarios have been provided to demonstrate the more advanced
features of this version of MindRoverQ:
- Program a team of rovers to steal a tennis ball from the
rec area in the base, where another team of rovers waits to foil them.
- The base has been strewn with small, fragile units that shy away from noises.
Program a team of rovers to gather them up and herd them safely back into
the lab. [Note: bumping kills them, use audio components to herd them instead]
- Odd alien vermin (insects? it's hard to tell) have invaded the base.
Design a team to extirpate them with the constraint that
the only recovery from damage is healing
components - not respawn. Did we mention that they fly?
- Program a team of five rovers to play tic-tac-toe against another
such team on a grid of nine waypoints.
- More alien vermin, this time outside on the surface of Europa.
Program rovers to invade the vermin's nest and wipe them out.
Units don't respawn, but any expired unit leaves resources
which can used to produce more units.
- A sequence of fundamentally combat-oriented Scenarios in the campaign style,
with the final resources of each mission retained for the next, and new
components becoming available as well.
Full OpenGL Console
Players should now be able to read the console and all other text in all resolutions
from 800x600 to 2048x1536 and beyond, due to the entire game now being
in OpenGL, with full rendered, textured consoles and text.
Further, the default textured text size and font can be adjusted independently
of the screen resolution, so that any player can adjust the text to the size and font
most appropriate to his needs.
Rover Skinning
Vehicles can be marked both for basic identification and team purposes.
- Each vehicle has a default texture supplied with the game or 3rd party module.
- Each vehicle can be further associated with an user-creatable RGBA texture.
- Each team can be associated with a supplied or user-creatable RGBA texture.
- These three textures are composited on all vehicles to which they apply.
- MindRoverQ understands the PNG image format with full alpha,
SGI raw RGBA images (OpenGL's native encoding), and various other image formats
as noted in the release notes.
- Named textures are search for in the textures/ subdirectory,
by added various extensions to the base texture name and taking the
first to appear.
The base search order is .rgb (RGBA files), .png (PNG with alpha),
JPEG, and others as specified in the release notes.
Wiring Action: Prune Effectless Wiring
A GUI action in the Wiring panel which removes all logical components which are:
...and removes them. This is repeated until no changes occur.
This can be called on the whole design with LSIs, whole design excluding LSIs,
or on a given LSI.
New Components
Component: Resource Accumulator (physical)
Trigger this to have a rover load any colocated resources into itself.
The accumulator will load resources up to the maximum weight limit, leaving
any remainder for possible future pickup.
Resources can be located with a loot finder,
Component: Filter Loot (physical)
This is similar in function to the Filter_IFF,
except specialized for discrimination among the various type of loot.
Component: Heal Other (physical)
Use this very short range directional device to heal other units in its area of effect.
Also works on unfriendly rovers, so be sure to verify your target!
Component: Constructor (physical)
Wire this together with a Resource Accumulator and a Heal Other
to construct new rovers from collected resources.
- The constructor rover must be at rest in order to build.
- The new unit design is selected by a text input, allowing the use of
computed design names with the Splice component.
- The new unit is constructed in front of the constructor.
- The new unit starts with with 1 health, with all systems off including healing.
- Heal the unit to full health to activate it.
- Incomplete units not being healed lose health until healing begins again.
- If the incomplete unit drops to zero health it collapses back into raw resources,
which may be picked up again using the Resource Accumulator component.
Component: Thrusters and Vertical Mounting (enhancement)
This version of MindRoverQ supports vertical mounting of the Thruster
component.
- Thrusters may now be installed in the vertical orientations up and down.
- The Components screen will display a warning if the combined thrust of all installed
vertical Thrusters is insufficient to lift the vehicle.
- Use in conjunction with two Level components to achieve stable Thruster-based flight.
Component: Broadcasts and Event Types (enhancement)
This version of MindRoverQ supports more broadly-functional Broadcast
components, which now fully support the Source Property aspect of wires
connecting them to other components.
Component: Level (physical)
The Level component output an real number between [-180,+180) indicating rotation
from vertical (0) along the component's primary axis.
It's designed for use in balancing the thrust of multiple vertically-mounted
thrusters.
Component: Rotor (physical)
Notionally this could either be a counterrotational dual-rotor system
(no tail rotor needed), or the more traditional helicopter style with a
tail rotor without changing the component attributes.
- A inexpensive, 2x2 helicopter-style rotor component suitable for vertical mounting.
- Can be mounted horizontally, or in opposition to one other Rotor, but be aware
a rotor-equipped rover contacting any surface, wall, or other other vehicle must
do so with a side of itself directly opposed to all mounted rotors to avoid
immediate destruction.
- Flight is controlled by the attributes
thrust, heading, and pitch.
- Note that a rover will suffer decrease upward thrust if it
shifts from hover to horizontal motion without increasing thrust, as the
overall thrust vector has rotated.
- To fire fixed-mount weapons upwards or downwards, the pitch of the
rover must be changed, with the corresponding effects on motion from the
redirected thrust vector
- Legacy existing weapon components work in the vehicle's own lateral plane.
Rotating weapons, radar, etc., may be edge mounted with a vertical orientation
to achieve the effect of declination for shooting targets at, for example,
a 45 degree downward angle while maintaining hover.
Component: Timed Rocket Launcher
Similar to the standard Rocket Launcher, except for the addition
of a Timer attribute, which causes a fired rocket to automatically
detonate after traveling for a set time.
Use this attribute together with the RocketSpeed attribute to
detonate a rocket at a predetermined distance.
Slower and larger than a standard Rocket Launcher.
Historical note:
This component allows the full (except for the actual programming)
emulation of the seminal, Apple ][-based programmable robot
combat game from the 1980s,
in which each of up to five tanks had the
equivalent of a Timed Robot Launcher, Sonar, Hover chassis,
x/y thrusters, HealthSensor, and a FilterIFF).
I think I still have my programs for the robots somewhere...
Component: Interconnect (logical)
A logical component marking a point in a wiring diagram to which a particular
physical component should be connected.
A default component can also be specified.
- An Interconnect has an attribute of Default Hardware,
which can be set to the icon of the physical component type to which it should
should usually be connected.
- The default component can be ignored and the Interconnect simply
wired to any other arbitrary component.
This is especially useful if the component actually chosen has the
same control properties as the default.
- Default Hardware slots not yet connected can be automatically connected to the
appropriate components in the GUI on a per-Interconnect or all-at-once basis.
- A GUI action Install Missing Hardware exists to place missing hardware
for the Default Hardware slots on one or all LSIs in a design.
The resulting components will be randomly placed on the rover
until either all or placed are no space for hardware remains,
in which case the hardware placed up to that point is retained
and a warning is given.
- Interconnects with no output wires, such as to their default physical
component, are considered effectless for the purpose of the
Prune Effectless Wiring action.
Use this to tailor complex multipurpose LSIs to a specific vehicle.
Example use:
- Build an LSI to connect a Sonar and Filter_IFF to a Rocker Launcher and a Laser
so that the weapons fire when an enemy is detected.
Add a Timer so that the Laser doesn't fire until one second
after the Rocket Launcher does,
so as to have both impact the enemy more simultaneously.
- Use Interconnects in place of the physical components (since you can't put
the actual hardware components on the LSI).
- Save your design.
- Select a fresh, empty vehicle in the Vehicle console.
- Drop your LSI in the Wiring console.
- Use the Install Missing Hardware button.
- Notice that a Sonar, Filter_IFF, Rocket Launcher and Laser have appeared
in random positions on the rover in the Vehicle console.
- Use the Connect Interconnects button.
- Notice that the physical components now have thicker, distinctive lines
connecting them to the Interconnects.
- Remove the Rocket Launcher.
- Notice that the line which connected it to its Interconnect is also gone,
and that this Interconnect is therefore now effectless.
- Use Prune Effectless Wiring.
- The Rocket Launcher's Interconnect disappears from the LSI, which
has acquired a new version number and is saved to a new .lsi file on disk.
- Notice that the Timer has also been stripped,
since the only component it effected (the Interconnect) was no longer present.
- Rearrange the physical components on the rover to taste, then try it out!
Component: LSI - Large Scale Integrated Electronics (logical)
Design a new logical component out of the existing ones,
- LSI are designed in LSI Design mode, cannot have actual physical components,
and are stored in .lsi files separate from standard wiring files.
- A new LSI has as many input and output lines as needed,
each named and connected to one of the internal logic components.
These I/O lines are created by attaching wires from the various
components with the LSI to the surrounding rectangular zone
in the LSI Design console.
- LSIs appear as vertical rectangles when dropped into the Wiring console,
labelled across the top with the LSI name,
with the various connection points listed within.
- Wires may be dragged directly to the LSI connection points,
or to the title area of the LSI where a menu is popped up to select the
connection point.
The latter is useful for in large designs zoomed out to a fair degree,
allowing the connection points to be listed in a readable font size when
in the popup menu.
- These named connection points also show up in the logic component
Set Property pulldown
in the Wiring console when connecting wires to the completed LSI.
- LSIs are independent of the vehicles, and any vehicle loaded always
dynamically uses the current LSI file even if newer than the vehicle
itself.
Component: Net Socket (physical)
Net Sockets function similarly to the newly-enhanced Broadcasts
except that incoming Events
are translated into protocol and sent to a separate process on (generally)
another computer elsewhere on the Internet.
- Any given vehicle with this component may communicate with exactly one TCP/IP
host while it's running. Additional Net Sockets have no effect.
- The default host, port, login, and password used by the Net Sockets to connect
are configured in the options menu, and can be overridden on a per-team and
per-vehicle basis on the Vehicle screen during setup.
- Trigger Open on the Net Socket to attempt to connect to the remote host.
- The Online event is sent once the connection is up and passes a protocol check.
- The Failed event is sent if the Connect fails.
- The Disconnected event is sent on a dropped connection or remote-side socket close.
- Trigger Close to shutdown a link. Closing an unconnected Net Socket is harmless.
- The game continues in realtime during connection attempts, so a vehicle should
probably be constructed so as to be able to take care of itself meanwhile.
Protocol
Note:
A PERL module supporting this protocol is available from our website and from CPAN
(www.cpan.org). This can be used to simulate remote-robot control, such as remote
mapping, as well as to bring more serious computing force to bear on the panoply
of problems facing rovers at the Europa Project.
User control of a rover, by keyboard, mouse, spaceball, etc., could
also be implemented by this mechanism.
- Each connection rover creates a new connection to the remote host and port,
the server for which would be implemented typically in C or PERL using
the listen and accept calls.
- A given rover's connection is shutdown if the rover is destroyed.
- The initial negotiation sends the login and password in the colon-delimited format:
roverlogin: vehicle-name : login : password
- A conforming server should respond with the following,
mindrover-accepted: vehicle-name
- Either the client or server may initiate close of the connection after sending:
shutdown
Although server code should handle the case of connections dropped without
"shutdown" having been sent.
- The event message form is based on an individual component name,
not the type, allowing different identical objects to be specified individually:
event: component-name
: attribute
: value
[an error occurred while processing this directive]