Jump to content

SceneNavi - A simple Ocarina of Time level editor


xdaniel
 Share

Recommended Posts

Cleaner yes, because an actor definition applies to only an actor with a specific number. More than that though, is that I want to use the definitions with my own projects, and others would possibly want to do the same.

 

It would also allow for the definitions to exist within a singular file and posted on, if someone wanted to do just that.

Link to comment
Share on other sites

Hrm, how's that:

<?xml version="1.0" encoding="utf-8" ?><ActorDatabase ProgramVersion="1.0.1.6">  <Definition IsDefault="RoomActor, SpawnPoint">    <Item Index="0" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Usage="ActorNumber" Description="Actor Type" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="2" ValueType="System.Int16" Usage="PositionX" Description="Position (X)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="4" ValueType="System.Int16" Usage="PositionY" Description="Position (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="6" ValueType="System.Int16" Usage="PositionZ" Description="Position (Z)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="8" ValueType="System.Int16" DisplayStyle="Hexadecimal" Usage="RotationX" Description="Rotation (X)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="10" ValueType="System.Int16" DisplayStyle="Hexadecimal" Usage="RotationY" Description="Rotation (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="12" ValueType="System.Int16" DisplayStyle="Hexadecimal" Usage="RotationZ" Description="Rotation (Z)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="14" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Description="Variable" ControlType="System.Windows.Forms.TextBox"></Item>  </Definition>  <Definition IsDefault="TransitionActor">    <Item Index="4" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Usage="ActorNumber" Description="Actor Type" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="0" ValueType="System.Byte" Usage="NextRoomFront" Description="Next Room" Mask="0xFF" ControlType="System.Windows.Forms.ComboBox"></Item>    <Item Index="1" ValueType="System.Byte" DisplayStyle="Hexadecimal" Description="Camera (Next)" Mask="0xFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="2" ValueType="System.Byte" Usage="NextRoomBack" Description="Previous Room" Mask="0xFF" ControlType="System.Windows.Forms.ComboBox"></Item>    <Item Index="3" ValueType="System.Byte" DisplayStyle="Hexadecimal" Description="Camera (Previous)" Mask="0xFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="6" ValueType="System.Int16" Usage="PositionX" Description="Position (X)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="8" ValueType="System.Int16" Usage="PositionY" Description="Position (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="10" ValueType="System.Int16" Usage="PositionZ" Description="Position (Z)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="12" ValueType="System.Int16" DisplayStyle="Hexadecimal" Usage="RotationY" Description="Rotation (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="14" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Description="Variable" ControlType="System.Windows.Forms.TextBox"></Item>  </Definition>  <Definition Number="0x0009" DisplayModel="ColoredDoor" PickModel="Door" FrontOffset="180.0">    <Item Index="4" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Usage="ActorNumber" Description="Actor Type" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="0" ValueType="System.Byte" Usage="NextRoomFront" Description="Next Room" Mask="0xFF" ControlType="System.Windows.Forms.ComboBox"></Item>    <Item Index="1" ValueType="System.Byte" DisplayStyle="Hexadecimal" Description="Camera (Next)" Mask="0xFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="2" ValueType="System.Byte" Usage="NextRoomBack" Description="Previous Room" Mask="0xFF" ControlType="System.Windows.Forms.ComboBox"></Item>    <Item Index="3" ValueType="System.Byte" DisplayStyle="Hexadecimal" Description="Camera (Previous)" Mask="0xFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="6" ValueType="System.Int16" Usage="PositionX" Description="Position (X)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="8" ValueType="System.Int16" Usage="PositionY" Description="Position (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="10" ValueType="System.Int16" Usage="PositionZ" Description="Position (Z)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="12" ValueType="System.Int16" DisplayStyle="Hexadecimal" Usage="RotationY" Description="Rotation (Y)" Mask="0xFFFF" ControlType="System.Windows.Forms.TextBox"></Item>    <Item Index="14" ValueType="System.UInt16" DisplayStyle="Hexadecimal" Description="Variable" ControlType="System.Windows.Forms.TextBox"></Item>  </Definition>[... ...]

<ActorDatabase ProgramVersion="1.0.1.6"> is now the parent tag for all definitions. ProgramVersion is mandatory and must be the same as the SceneNavi version the file is for; 1.0.1.6 means "v1.0 Beta 6". The leading 1.0 should be obvious as should the 6, the 1 denotes the build type - 0 is Alpha (unused so far), 1 is Beta, 2 is final release, anything else is invalid.
 
<Definition ...> is the actor definition itself. IsDefault is optional and signifies that this definition is the default for the specified kinds of actors, RoomActor, SpawnPoint and/or TransitionActor; one definition can be the default for multiple actor types, separated by commas. Number is the actor number, either in hexadecimal (must be prefixed "0x") or decimal (no prefix), and is mandatory for definitions that are not defaults. DisplayModel, PickModel and FrontOffset I touched upon before, all are optional and default to actor cubes and a front offset of 0 degrees.
 
The Item and Option tags work as before. Actor definitions can be spread across multiple files, as long as they all have the extension .xml and follow the same layout as above (enclosed in ActorDatabase tag with version number, etc.). If you want to use the definitions in your own projects, use or ignore any tags you'd like, but if you want to write some for SceneNavi, heed which ones are mandatory and which are optional.
 
Hope I didn't forget anything; more documentation to come with the first final build. The general layout is planned to stay the same from now, tho pending any feedback from you guys (I guess mzxrules in particular?), DisplayModel/PickModel, Usage and the like might get more possible settings, which will also be documented in due time.

 

  • Like 1
Link to comment
Share on other sites

So, I was thinking, I'd like to contribute by documenting every enemy's health value and you could implement it into SceneNavi by making creating the option of changing enemy health values. I would document damage charts too, but I can't promise I'll do that part for sure.  I would take my time doing the enemy health value thing alone.

Link to comment
Share on other sites

Until it exists in an importer, would it be at all possible to implement per-vertex colour and alpha adjustment? My interior maps look awful without it, and it's kind of required for making decent bottomless pits without wasting space on additional textures that have the fade as part of the texture. Banjo's Backpack has a nice method of picking which vertex is being edited, clicking on the triangle, it picks the nearest vertex of that triangle. It's much easier than picking the actual vertex itself, since there are sometimes multiple verts at the same co-ords.

Link to comment
Share on other sites

If they really want to modify the geometry there are plenty of tools to do so, SceneNavi doesn't really need that feature anyway xdan, Vertex Colors/alpha should be plenty.

 

Also looking good :D

 

EDIT:Are those spheres? Or just a billboard, kinda hard to tell with that red.

Link to comment
Share on other sites

Looks like a solid implementation. As long as the vert selection area is big enough to detect clicks and I can select the triangle first, I'll be happy. UoT's picker was nightmarish. Also, I've still been getting messed up textures on custom maps, but I'm not sure if that may be due to having different texture types in the same dlist.

Link to comment
Share on other sites

The least you'll be able to, vertex selection-wise, will be selecting one of the three from a drop-down list or somesuch. I'd rather get mouse-based vertex selection working in the way you've described, but that'll be the fallback depending on how it works out.

 

As for messed up textures, in what way are they messed up? Completely incorrect or no textures being loaded? Any way you could upload a patch or the scene/room files for such a broken map, so that I can take a closer look?

 

Edit, Antidote, billboards, or rather vertices being rendered in OpenGL's points mode.

Edited by xdaniel
Link to comment
Share on other sites

I did a test map with 1 texture only, and nothing showed up at all. In other maps, you can still tell what the textures are supposed to look like but they're very garbled still. I'll make some ppfs and upload them.

 

edit: PM'ed you the link for the ppf files. Because there are certain things I'm trying to keep secret for a project that I might use in those files :3

Edited by Arcaith
Link to comment
Share on other sites

With real life starting to move again for me, I haven't had much time for SceneNavi over the last week, and what time I did find for programming I spent on my Zelda-ish engine thingy. That said, at least the bugs that Arcaith encountered I managed to fix a few hours ago; more improvements and additions - vertex color editing as mentioned above, more collision and scene metadata stuff, etc. - will come at a somewhat slower pace for now.

  • Like 1
Link to comment
Share on other sites

Select a room, select a room model triangle, then double-click a vertex to access the color picker dialog. Change the color there, the rendering refreshes and shows the changed color. Save the ROM as normal to, uh, save the changes to ROM :P

 

Might replace the standard Windows ColorDialog with something custom, to also allow changing of the Alpha value. It's also a bit hacky internally - writing changes to the local copy of the room data for rendering AND to the ROM data itself - but it works so I'm not gonna worry about it much.

 

Posted Image

  • Like 5
Link to comment
Share on other sites

Out goes the scrollbar, in comes... another PictureBox-based slider. Also changed the marker thingy to a triangle, to make it clearer.

 

Posted Image

 

Edit, compiled the changelog for Beta 6, which might see release later today (Sunday) barring any unforeseen circumstances:

  • Finally added Scene Metadata tab, so far contains a few sound-related settings (daytime BGM, nighttime SFX, reverb); more settings to come
  • Actor definition format changed; actor number now part of definition, definition can be set as default for certain actor types unless overridden by specific definition
  • Changes to transition actor handling; added drop-down lists for rooms to transition actor editing, renamed some options for clarity
  • Actor definitions now also support the properties "DisplayModel", "PickModel" and "FrontOffset", which are currently used mainly with transition actors (documentation forthcoming)
  • Added mouse-based selection of rooms in static objects mode; only works when collision rendering is disabled; selects collision polygons as usual when enabled
  • Added mouse-based selection of room model triangles and vertices; allows editing of vertex colors and alpha
  • Fixes to Ucode interpreter to not reset certain parameters on display list calls (DL, BRANCH_Z); fixes missing textures on ex. Death Mountain
  • Added texture loading macro workaround to Ucode interpreter, now also tries to load textures on SetCombine command; fixes a few missing textures, ex. walls in Water Temple's first room
  • Fixes to texture loading macro implementation, potentially did not correctly apply palettes to CI-type textures; fixes incorrect textures on certain custom maps
  • Fixed offset detection error with polygon type definitions on some custom maps; now correctly loads polygon types
  • Removed some unnecessary OpenGL function calls; gives notable FPS increase in many cases, such as certain temples
  • Added more fallbacks for lower-end hardware, added detection of Intel graphics hardware to disable combiner emulation regardless of the hardware's reported capabilities
  • Fixed room display list caching; now no longer re-renders rooms on every scene change, even if a room has been cached before with the same settings (i.e. textures en-/disabled)
  • Some refactoring to the program's internal data storage (i.e. which scene header is active and what it contains, which room header is active, etc)
  • A few object picking bugfixes; ex. some erratic behavior when selecting things via middle-click
  • More status messages, ex. for ROM loading and saving
  • Rearranged Options menu
Edited by xdaniel
  • Like 2
Link to comment
Share on other sites

Exception 

 

Object reference not set to an instance of an object.

 

Show detailed information?

 

Yes

System.NullReferenceException: Object reference not set to an instance of an object.
 at SceneNavi.XMLActorDefinitionReder..ctor(Stringdefdir) in C:\Users\Daniel\Documents\Visual Studio 2010\Projects\SceneNavi\SceneNavi\XMLActorDefinitionReader.cs:line 177
 at SceneNavi.ROMHandler.ROMHandler.ctor(String fn) in C:\Users\Daniel\Documents\Visual Studio 2010\Projects\SceneNavi\SceneNavi\ROMHandler\ROMHandler.cs:line 176

This is what I get when I open a Debug ROM.

Link to comment
Share on other sites

This is what I get when I open a Debug ROM.

Hm, looks like it fails while trying to load an actor definition... If you haven't done so, try extracting all files to a fresh folder, making sure the folder structure is the same as in the archive, and try it again. If that doesn't work, I'm not sure, I'd need to do some thinking and hunting for this.Edit, yeah, I got the same exception using the Beta 6 EXE file and Beta 5's XML folder. I'll implement some better error handling in this case for the next build. Edited by xdaniel
Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.