First off it's important to isolate things that need to vary from game-to-game, and things that don't; this is of course up to the discression of the developer of the IDE.
The important thing to keep in mind is that the more we allow the developer of the game to change, the more complex the IDE and Engine must be; on the flip side, not allowing enough flexibility will result in games that are very very similar to one another.
-many possible game types/features
-games that are similar in control and function are appreciated by users
-more complex IDE and Engine
-longer development time (more custom code required)
In short, the more you can "nail down" what type of game the system can create the easier the system will be to create. We've got a huge benefit in that adventure games are pretty well defined, we will offer a standard adventure game type which is configurable via it's rooms and entities and control the game specifics via raw script code which should give us plenty of flexibility.
The Game World:
The 'Game World' of our adventure games, will consist of a 'Game' object, many 'Room' objects and many 'Entity' objects, fairly simple. Each object of this type has an associated script, which allows usage of the engine apis to program most of the game 'logic'.
Like most adventure games the player will control an entity and can walk them around and make them interact with the environment; fairly standard.
At the moment we'll be using the same system used in the S3Engine(and malathedra), which is the 3-verb radial menu, the topic menu and the item menu; see previous journal posts for details.
As a quick addition to this I "REALLY" want to add some aspect of physics to this game engine, since to my knowledge physics has yet to penetrate the adventure game market much; and it could make for a lot of interesting new puzzle types.
The engine will work by maintaining the game world and all the critical resources which are loaded from a resource bundle (zip maybe?) it will host the scripting language which allows the developer to write logic which commands the engine.
The Scripting System:
We'll be using lua again as a scripting engine, it does a really really good job and it means I don't have to write my own :) The internal game world (state) will be made accessable to lua scripts likely by using tolua++, moving twoards a more OO like scripting style than the previous procedural C-like ones. There will be some globally accessable pre-defined objects such as 'game' 'screen' etc.
Pulling it Together:
After laying down some of our needs we get a clearer picture of what is needed in an IDE; for example: A way to create rooms and entities, ability to place entities and scenery elements into rooms and the ability to create and modify scripts for objects.
I took a moment to lay out some of the objects and properties and functions that will be avaliable in the scripting environment, I though you might like to have a look:
-name //game name
-company //game company
-version //game version
-autosave() //perform an autosave
-onInit() //event when engine is ready to start game
-color //screen modluation color
-material //screen material
-fade() //fade the screen to and from a color
-shake() //shake the screen
-music //background music file or ID
-place() //place an entity in this room
-name //display name of the entity
-positionA //actual x,y,z position
-positionB //position we wish to attain
-headingA //actual direction angle
-headingB //direction we wish to attain
-speedA //actual motion speed in meters per sec.
-speedB //speed we wish to attain
-costume //current entity costume (read-only)
-action //current entity action (read-only);
-verbEye //eye verb "look, examine, stare..."
-verbHand //hand verb "touch, feel, push..."
-verbMouth //mouth verb "talk to, bite, lick..."
-logicInterval //how often to call event onLogic -1 denotes infinite interval
-room //room reference(read-only)
-collidable //causes collisions?
-obstructable //obstructed by collisions?
-shadowable //casts a shadow?
-lightOn //entity light is on
-light //light object
-color //modulation color
-topics //conversation topics
-change() //change current entity costume
-animate() //perform animation action
-move() //move to a named position
-moveTo() //move to another entity
-look() //turn to look in a given degree angle
-lookAt() //turn to look at a given entity
-stopAnimating()//stop current animation
-stopMoving() //stop current motion
-control() //entity reacts to user input
-watch() //camera tracks this entity
-addTopic() //add a new conversation topic
-addAnimation() //add a new animation
-onCreate() //event after instance is created
-onLogic() //logic event controlled via logicInterval
-onMoveStart() //before a move starts
-onMoveStep() //during each move 'step'
-onMoveDone() //after move is done
-onAnimateStart()//before an animation starts
-onAnimateStep()//during each animation 'step'
-onAnimateDone()//after animation is done
-onEye() //eye verb event
-onHand() //hand verb event
-onMouth() //mouth verb event
-onDefaultEye()//default eye verb event for controlled entity only
-onDefaultHand()//default hand verb event for controlled entity only
-onDefaultMouth()//default mouth verb event for controlled entity only
-onChange() //after a costume change