Play instances, edit instances
Play instances can be sandboxes
Seamless world between areas, edit instances can exist for different parts of seamless world.
Create heightmaps, duplicate, drag (3 heightmaps in line)
Add GM Note "Plan", write "Hi"
Show where walls go
Choose different color, add river here...
Different color, add gate thing here.
Different color, fire
Move viewpoint, show that clicking on plan pops back to original viewpoint.
A: Draw in basic mountains
Asset Library, create HeroEngine crate.
D: Perlin, add terrain. C: Adding river
If brushes overlap, who comes first? A: Last person wins (if doing the same thing). If one is sculpting, and one is painting, there's no conflict.
Make spike to change one vertex.
Soften tool to smooth out spikes
C: River in place.
Go into character mode, jump in river.
B: Add town heightmap (brown), create town on top of it.
Change lighting, for shadows in mountains, distant fog.
Select active environment scheme, dynamic sky, change time of day.
When do change reflect? When moving an object, no, but when letting go, yes.
Environment schemes are being changed locally, and are not reflected in other people's view (yet).
Asset Library, categories, tabs, add broken wall (maingate), tower, wall at angle over river
Texture environment from basic green.
Change primary layer to rocky along sides of hills.
Is painting "logical"? No, it's a mask.
Layer 2: Rocky/cobblestone, transparent in cracks.
Drag UV Scale to modify
Paint other textures under rocks
Paint rocky path along road, adjust slope so it only affects flat areas.
Turn off tree filter
"Break up cobblestones" with different texture.
Dynamic details, put in grass, low transparency, high scale.
"Give me some wind"
Is there a maximum number of layers? "After 4 layers it doesn't do anything", but 256 textures allowed between the four layers.
All layers are independent channels with their own settings.
Trees already added..
Move view along road
Editing client is same as player client, but with tools.
See characters standing on different hills.
90% of player client is in C++. Shell on top calls DLL, can call browsers or others. Skin it with whatever code to create the login experience.
Paint other dynamic details: Brambles, adjust density.
Scene Analysis Panel.
Look at materials being used.
Textures being used.
Current frame. See which textures are being switched to and how often. Change view, see numbers change.
Choose texture. Lowlands mainwall, see .dds (grab image)
Cycle through objects that use a certain texture.
Artists tend to use large textures (Mona Lisa on the wall).
Histograms to do color-matching.
Show concept art in viewport.
Snapshot to compare with other part of terrain.
Performance monitoring at deep granular level (Performance panel)
Where did you get the ideas for statistical analysis tools? One guy, or something that clients asked for?
A: Overall vision, we've been building games a long time. Collaborative environment based on the way we do text games. Hero's Journey, we wanted collaborative environment.
When B builds environments, it is very different. They do layout, with color only at beginning. Big blocks of color, not the form. Driven by their concept art. Once color-composition is in, the assets come in. The cube turns into a building, but maintains the same color balance.
Run character down road, to cobblestones, towards city, through archways.
Chomper door, place on road.
Get viewpoint towards door, and from side of door.
Right-click, set state to OPEN, then CLOSED. Synchronized on clients.
Create lever near door. Lever has states as well> Is player near? Create icon.
Wire ON to DOOR OPEN
Wire OFF to DOOR CLOSED
Pull lever, animation already available
Show class hierarchy for doors. "It isn't a class".
Show introduction of new assets into the environment.
Switch to Aron's view, in 3D Studio Max, creating a mushroom.
Export art to game directory.
Open repository browser, move mushroom to library.
C: Add mushroom to world.
Modify mushroom in Max, re-upload. Automatically changes all existing assets to new art.
Change scale of individual mushrooms, with scale tool, or directly in properties to 5,5,5
All of the above is the visual representation of the world.
Next, the physical representation of the world.
Open Physics panel
Visualize Physics Data
Take mushroom, simplify to box. Affects all assets in current area.
Change to ConvexHull.
Choose custom shape. Modify decomposition depth to create a series of convex hulls.
Change art from Max, export to world. (what happens to physics representation?)
Crash, but work still saved, if within 10 milliseconds.
We've been working in play instance.
Go to breach in wall.
Find boulder tall bgd.gr2, place in gap. Scale to fit.
Without scripting: Special effect to move boulder.
Add state: Barricade
Values: Up, Down
Action List: Kaboom
Action Type: Transform.
Interval: 3 seconds, offset 0,-2,0, EASE_OUT
Add Action List: Reset, Transform, no other changes (returns to original state)
Transition Editor: Up to down: Kaboom
Down to Up: Reset
Link to object.
Right-click on object, change state to DOWN.
Change state to UP to reset.
Edit state, action list, kaboom, playfx, 407, "breach explosion"
Set to "down" for explosion.
Make it react to player.
Library, find State Trigger Extension.
State, Wire, ENTER, Barricade DOWN
Player mode, run towards boulder. Expand trigger node.
Run into dungeon entrance.
Create gameplay through script.
Client and server work on same data object model principles.
Is HeroScript based off of other scripting languages? Syntactically, sort of a modern Visual Basic. Designed to be usable by amateur programmers. Procedural language, and then evolved from there.
Change gravitational coefficient in HJ_ACCControllerClassMethods, from .98 to .08, jump
One main different in HSL: Data Object Model is external and not defined, whereas in most other object-oriented languages, there are clauses to define classes and fields. In HeroEngine, these are defined external to the scripting language but are used by the language dynamically.
The DOM Editor is where DOM is defined. Classes, fields, enumerations, associations, association groups. Associations are like very smart pointers.
Show all classes. These are everything from scripting "up" in HeroEngine/Hero's Journey.
By convention, everything that is ours and not the licensee's, is preceded with underscore.
Every data object in our environment has a unique 64-bit identifier, shared across the universe. Half the ID space reserved for us, half for the people building stuff.
Fields in the class:
MMORPGDemonstrationString. Click to edit, show variable type.
List of other fields shown in top section.
Lists, lookup list indexed by string of list of id
Fields are in a flat-named space. Field "Bob" exists everywhere.
Classes are also in a flat-named space. Multi-inheritance. Diamond problem solved because of flat-named space.
Intellisense. Dynamic live environment. Updated dynamically.
Change name of DemonstrationString to CompanyDemonstrationString. Classes that use the field are automatically updated. Scripts that use the field are automatically updated to new name as well. All identifiers work like that.
MMO projects tend to be long projects that "bork" (sp?) a lot. Designers change names, like "Enhancements" become "Buffs", etc.
Where are methods declared? In the DOM? No, just right in the method scripts. No declaration necessary.
Functions. "Untrusted" modifier to flag things being called from the client.
Every instantiation of a class is called a node. A node can be promoted to a prototype, which is a node with actual field settings bundled up... singleton.... entire world.
... Debug visualization
How to refer to a specific item in an area? By ID.
Fields in DOM Editor, checkboxes: R= Replicated Field. Gray fields affect how replication happens.
Network panel, to simulate different limitations and latencies
ScriptError panel: Server and client errors. Click on error to jump to script.
Scripting engine is armored so you cannot crash the server without extreme nonsense. Even infinite loops won't crash it. Recursion won't crash it.
Anecdote: Galaxies was using modified virtual machine, which whenever it ran into a script error, would automatically crash.
- Visualize navigation mesh, shows what server understands.
- Turn off bounding boxes
- Modify Path Data Visualization Range
Automatically updating as terrain is edited. Dynamically updateable regions.
Move object, red boxes show what needs to be updated, and area is queued for rebuild. Pretty much instantaneous, except we only have one path-building server running right now.
Is that the same service as ...?
Each box represents a node in the pathfinding system.
Doors should "cut" paths.
Create Pathfinding Node, make smaller, place on terrain. It modifies the nav mesh in realtime. A stateful door could modify the associated pathfinding node to turn connections on and off.
Nav solver in the background? It does it in realtime.
Computed as if pathfinding block wasn't there?
Visualize mesh, live region updates, show connections, visualize raycast paths, enable/disable pathmaker server.
100% running on server, sends messages to client on which lines to draw.
Area server, world server.
Javelin layer which the database plugs into. SQLite on the client side.