Daniel Lepage on 29 Mar 2003 23:45:01 -0000


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [Spoon-business] Re: [spoon-discuss] Lots of stuff



On Friday, March 28, 2003, at 09:53  PM, Glotmorf wrote:

On 3/28/03 at 12:02 AM Orc In A Spacesuit wrote:

From: "Glotmorf" <glotmorf@xxxxxxxxxxxxx>

My biggest objection to the Uber-Prop was that it was too much at
once...that it tried to do too much in one sitting.  This was
particularly
bad because, since it would take more than one nweek to write, it was
likely to leave stuff out, such as stuff that had become part of the
ruleset while it was being written.

First, I dare you to, in 1 nweek, write a proposal that will implement a
class system that will not cause any bugs.

Okay...I'll borrow Wonko's idea for identifying "new objects", calling them "second-generation objects", on the off-chance that we'll someday need "third-generation objects"...

{{ _We Ain't Got No Class...Yet_

To some degree, we have some basic classes and inheritance already - things like Passable Objects and MOs, and things that derive from them like Carryable Objects and Throwable Objects. We also have things like the Statue of the Admin, which, according to the rules, "is an Ancient Monolith except..."; this basically says, "Class 'Statue of the Admin' derives from class 'Ancient Monolith', except that the following methods and attributes are overridden: ...."

{{ _Class System_

There exists a collection of entities known as Second-Generation Classes, or 2GCs. 2GCs can, in accordance with the rules, be used to create other 2GCs or Second-Generation Objects (2GOs). The collection of 2GCs is known as the Class Set; the Class Set can be enpty, or contain any number of 2GCs.

That's an interesting word, 'enpty' :) It really seems stupid that we all use QWERTY keyboards, instead of something sensible that doesn't actively try to slow users down.

A. Classes

A 2GC can be created, modified or destroyed by a proposal or an explicit rule-permitted action. A 2GC is considered a part of the ruleset. A 2GC can contain Properties and/or Methods. Properties and Methods must have names unique within the 2GC or 2GO that contains them. Each 2GC must have a unique name.

A.1. Properties

A Property of a 2GC is a Flag, or a Variable, or an Object, or a collection of or pointer to any of these. Each Property may have rule text associated with its definition declaring the significance of the property, and/or under what circumstances the Property can be changed.

A.1.1. Flag Properties

A Flag Property is a Property whose presence or absence from an inheriting 2GC or 2GO is itself a characteristic of said 2GC or 2GO.

A.1.2. Variable Properties

A Variable Property is a Property that can contain a numeric value, a text value or no value.

A.1.3. Object Properties

An Object Property is a Property that, in a 2GO, can contain a game object, including a 2GO. The type of object must be included in the Property's definition.

A.1.4. Collection Properties

A Collection Property is a Property that, in a 2GO, can contain multiple Properties. The type of Properties that can be contained must be included in the Property's definition.

A.1.5. Pointer Properties

A Pointer Property is a Property that, in a 2GO, can contain a reference to a game object, or a Property or Method within a 2GO. The type of reference the Property can contain must be included in the Property's definition.

Wow, that looks a lot like the attribute class I'm using in my program. Except that I never really saw any point in 'Object Properties'; it all can be done with Pointers (or really, references). And I suppose the 'Variable' bit is more expanded - I've got Numeric vars, String vars, and Set vars.

A.2. Methods

A Method of a 2GC is a rule-permitted action that can be performed on a 2GO that derives said Method from the 2GC. The Method describes the effects of the action and the circumstances under which it can be performed.

'Performed on'? Doesn't that suggest that abilities they can perform themselves aren't Methods?

B. Objects

A 2GO is a game object that derives its definition, in full or in part, from one or more 2GCs. A 2GO can be created, modified or destroyed by a proposal, a rule-permitted action or a rule-mandated event. The declaration of a 2GO's definition does not in and of itself cause or mandate the 2GO's existence, unless said existence is declared within said definition.

The definition of a 2GO consists of Properties and/or Methods as are found in 2GCs.

C. Inheritance

2GOs and 2GCs, as part of their definition, can declare that they inherit from one or more 2GCs. Methods and Properties defined in the inherited-from 2GC are considered to be Methods and Properties in the inheriting 2GO or 2GC, unless they are overridden by declaring Methods or Properties in the inheriting 2GO or 2GC with the same name.

If a 2GO or 2GC declares it inherits from more than one 2GC, and Properties or Methods of the inherited-from 2GCs are in conflict, priority is given to inherited-from 2GCs in the order of declaration.

D. Recordkeeping

2GCs and 2GOs are each recorded as collections separate from the main body of rules.

}}

}}

How's that?  Any bugs?  What'd I forget?

Looks pretty good... So something like a Grid Square would look like,
{
Type:2GC
Name:Grid Square
Properties:
	x - Variable (must be integer)
	y - Variable (must be integer)
	Substance - Variable (defaults to "Turf")
	Elevation - Variable (must be integer, defaults to 0)
	Contents - Collection (may only contain other 2GOs)
} ?

And are these intended only for use on the Grid? Or do you see all objects, like rules and proposals, becoming this sort of thing?

--
Wonko

_______________________________________________
spoon-discuss mailing list
spoon-discuss@xxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/spoon-discuss