I have a vision for what Demo 2 should look like, but I want to run
this by everybody to see if we're on the same track. Here's the
improvements that I envision for Demo 2:
- All weapons working and associated with correct ships
- All ships working and associated with correct races
- Color tinter working for new graphics
- Planet capability and functionality
- Sidebar functionality
- Smooth zooms in and out
- Possibly AI?
If there's anything that any of you think should be an essential part
of the second demo, speak now or forever hold your peace!
Adam
> I have this thursday, friday, saturday, sunday, and monday off school
> with minimal homework, and a glut of free time. Other than RSA
> encryption, what should I work on next?
>
> @adam: I need to meet with you on IRC sometime to get a quick rundown
> of what all the lua stuff does so I can start figuring out how to
> implement multiplayer.
Alright, I'll try to be on as much as possible in the next few days,
but the time could vary from (all times PDT) 3:45 to 6:30 PM. I might
also be on from roughly 7:30 to 8:30 AM tomorrow morning, but that's
not for sure.
In the meanwhile, if you need to learn Lua (I don't know if you know
it or not), check out this site:
http://lua-users.org/wiki/TutorialDirectory
I learned Lua in two days (having learned C++ prior to this), so I
don't think it should be much trouble do you. Pay special attention to
tables, they're the basic data structure and are essential to Xsera.
Also, regarding the video - I'd like to have it posted to YouTube, and
I already have an account set up. If you're going to post it on
YouTube, that's great, I just thought that posting it on YouTube would
be the way to go.
I'm not sure what you're waiting on. Do you need the action data too?
I can provide the "raw" data, about 80% documented, which will be
fine as long as you're not dealing with corner cases.
I would suggest a revision of this to "All 'Rock and a Rock' ships"*.
These are the ones which are by and large the most interesting, and
they don't expose those corner cases as would e.g. the Ishiman Tractor
Tug. There are still some fancy things, like transports being keyed
to planets and assault transports to stations.
* The full manifest for this would be all pairings of the following
ships and races. Numbers are from memory, may not be correct.
100 Fighter
200 Cruiser
300 Gunship
450 Heavy Destroyer
500 Carrier
800 Transport
860 Assault Transport
100 Ishiman
200 Cantharan
300 Gaitori
600 Salrilian
700 Audemedon
900 Human
I'm wondering about some of the symbols that are still in the text
(for eg, from Text/5700...)
"To proceed, you need to learn to use the ship’s computer,"
I'm pretty sure that ",Äô" is a single quotation mark, just wanting to
make sure.
Also, I'm not exactly sure what you mean by "All 'Rock and a Rock'
ships". Are you suggesting that we associate classes of ships together
using numbers, as far as AI and the like go?
As far as the data, I believe we need the action data as well,
although I don't even know what that would look like in .xml.
Thank you for your work on Xsera,
Adam
http://git.sfiera.net/ares-data/tree/derived/Actions
As I alluded to, the data is not 100% fit for consumption yet, but a
large subset is. Once the data is complete, I should write up real
documentation, but here's an overview.
Say we're interested in the Ishiman Heavy Cruiser [1]. The HVC's
"special" weapon is Object 74, also known as "C Missiles (5)" [2].
This is a device, i.e., an object without physical presence.
Devices have one action defined on them, triggered by "activate";
"activate" happens when the device's owner fires the weapon [3], and
default to having a subject equal to their owner and a direct object
equal to the target (like grammar--think: "adam_0 shoots Sfiera").
This weapon's activate action sequence starts at Action 110, and
there's only one action.
Action 110 [4] is a <create-object-action/>. "Create object" actions
create objects at positions relative to their direct object, with a
few other options. It's important to note that this one is reflexive,
i.e., uses its subject in place of its direct object (think: "adam_0
shoots himself"). So the missile is created at the location of its
owner, not at the location of its target. It also uses direction
relative to its direct object (so you can aim it) and velocity
relative to its direct object (so you can hyperbomb with it [5]).
Also, the object that it creates is Object 72, or "C Missile" [6]. C
Missile defines three actions. We'll look at each, in the order in
which we might expect them to happen.
First is the "create" action, which fires upon creation of the object.
This specifies Action 111 [7], a <play-sound-action/>. "Play sound"
actions play a sound, which if not "absolute", are played at the
location of their direct object. This action is also reflexive,
meaning it'll be relative to the location of the subject, though I'm
pretty sure "create" actions are always reflexive, even if the flag
isn't specified.
Next is the "collide" action, which triggers upon collisions, with
this object, the collider, as the subject, and the collidee as the
direct object. Because the action has a count of 2, the missile's
"collide" action specifies Actions 29 [8] and 30 [9] in sequence.
First up is another <create-object-action/> which makes an explosion
at the missile's location, and second is a <die-action/>, which is
reflexive. The three types of "Die" action are 0 (none), 1 (expire),
and 2 (destroy). All three cause the removal of the direct object,
and the latter two may trigger additional actions.
(Note: damage is caused upon collisions based on the missile's
"damage" attribute, not by an action. There's a sound that plays on a
hit too, but it's part of the explosion's "create" action, not part of
the missile's "collide" action.)
Finally, if the missile is shot down, we'll trigger the "destroy"
action. The two actions specified create an explosion, then "die
expire" the missile. The "die expire" here is not strictly necessary,
as triggering "destroy" implies that the object will be removed, but
was probably specified so that some common action could potentially be
taken for either of the two ways for missiles to be destroyed (getting
shot down and hitting a target).
By the way, the HVC has its own destroy action, which also creates an
explosion. This one isn't velocity-relative, however, so if a heavy
cruiser bites it while in hyperspace, the explosion will be fixed in
place, and won't keep traveling along its trajectory.
I think this email is long enough, so I'll leave you to chew on it
before I start bringing up more advanced topics like the periodic
actions or (shudder) "alter base type". Many other action types you
can probably guess on your own, though, like <alter-cloak-action/> and
<declare-winner-action/>.
[1] http://git.sfiera.net/ares-data/tree/derived/Objects/061%20Heavy%20Cruiser.xml
[2] http://git.sfiera.net/ares-data/tree/derived/Objects/074%20C%20Missiles(5).xml
[3] There's another, rarer reason for activation which we'll ignore for now.
[4] http://git.sfiera.net/ares-data/tree/derived/Actions/110.xml
[5] Lousy f***ing hyperbombers.
[6] http://git.sfiera.net/ares-data/tree/derived/Objects/072%20C%20Missile.xml
[7] http://git.sfiera.net/ares-data/tree/derived/Actions/111.xml
[8] http://git.sfiera.net/ares-data/tree/derived/Actions/029.xml
[9] http://git.sfiera.net/ares-data/tree/derived/Actions/030.xml
At present, the most complete source for information about the Ares
data types is the Hera reference manual. Have I mentioned it before?
It's not stellar, but it does have a lot of information. It comes
with Ares 1.2.0 and later, but I've put it online [1] in case that's
too inconvenient.
The other thing is that an examination of the source code suggests
that my interpretation of the "Die" action was slightly off. It would
actually appear that type 1 (expire) and 2 (destroy) both affect the
*subject* rather than the direct object. The Hera manual makes a
claim to the contrary, but I can't figure out a way that the source
could be lying about it.
I am really unhappy about this right now.
Here's an example of why it needs to be different for those two:
The Energy Blob [1] has a collide action which includes a
<die-action/> [2]. That die action is a non-reflexive "die expire",
which, if it applied to the direct object, would mean that picking up
energy blobs would cause your ship to disappear.
Anyway, like I said, the source supports this interpretation:
case kDie:
// WriteDebugLine((char *)"\pDIE");
// WriteDebugLong( anObject->id);
// if ( anObject->attributes & kIsBeam)
// anObject->frame.beam.killMe = TRUE;
switch ( action->argument.killObject.dieType)
{
case kDieExpire:
if ( sObject != nil)
{
// if the object is occupied by a
human, eject him since he can't die
if (( sObject->attributes &
(kIsPlayerShip | kRemoteOrHuman)) &&
(!(sObject->baseType->destroyActionNum & kDestroyActionDontDieFlag)))
{
CreateFloatingBodyOfPlayer( sObject);
}
if ( sObject->baseType->expireAction >= 0)
{
// ExecuteObjectActions(
// sObject->baseType->expireAction,
// sObject->baseType->expireActionNum
// & kDestroyActionNotMask,
// sObject, dObject, offset, allowDelay);
}
sObject->active = kObjectToBeFreed;
}
break;
case kDieDestroy:
if ( sObject != nil)
{
// if the object is occupied by a
human, eject him since he can't die
if (( sObject->attributes &
(kIsPlayerShip | kRemoteOrHuman)) &&
(!(sObject->baseType->destroyActionNum & kDestroyActionDontDieFlag)))
{
CreateFloatingBodyOfPlayer( sObject);
}
DestroyObject( sObject);
}
break;
default:
// if the object is occupied by a human,
eject him since he can't die
if (( anObject->attributes &
(kIsPlayerShip | kRemoteOrHuman)) &&
(!(anObject->baseType->destroyActionNum & kDestroyActionDontDieFlag)))
{
CreateFloatingBodyOfPlayer( anObject);
}
anObject->active = kObjectToBeFreed;
break;
}
break;
[1] http://git.sfiera.net/ares-data/tree/derived/Objects/028%20Energy.xml
[2] http://git.sfiera.net/ares-data/tree/derived/Actions/051.xml