Git Product home page Git Product logo

winditor's Introduction

Winditor

A map editor for The Legend of Zelda: The Wind Waker!

Winditor contains a map editor, text editor, event editor, and various other features. For more details about Winditor and how to use it, refer to this site.

Winditor currently only supports Microsoft Windows.

Compiling from source

If you want to run the latest development/beta version of Winditor from source, follow the instructions below.

First download and install Visual Studio 2019.

Then use git to download the source code with this command:
git clone --recurse-submodules https://github.com/LordNed/Winditor.git
Downloading the source code as a zip won't work as that does not include submodules.

Finally, open Winditor.sln in Visual Studio and build the solution.

winditor's People

Contributors

hijen14 avatar laenthor12 avatar lagolunatic avatar lordned avatar sage-of-mirrors avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

winditor's Issues

Crashes on loading German text dump

As title says, I get an unspecified error "Editor has stopped working" and crash when using the German text dump /res/Msg/data1/bmgres.arc from the European release of TWW (GZLP01). All other languages from this version, plus US English and Japanese, work fine.

I thought it might have been something to do with the รŸ character, but replacing them all in a hex editor made no difference.

Completely unrelated and not an issue with your program, but I've found that some of the color codes can produce different text colors in-game. For instance, [red] often produces a deep orange (255, 100, 0) but sometimes produces light red (255, 90, 90), and I can't figure out which parameters for a given line of text determine which is used. There is also a darker red (180, 0, 0) that seems to get used for text on signs. If you're interested in looking into this, I can pass along some findings. It's not a big deal to me personally but it would help with multilingual term sourcing at Zelda Wiki (zeldawiki.wiki)

Dolphin Playtesting

Manually compiling resources output by Winditor and manually opening up Dolphin to test changes slows down iteration time when developing maps. A faster approach would be to allow the user to test changes on-the-fly, similar to Unreal Engine 4's Play in Viewport. This can be simulated by interfacing with Dolphin via CLI upon the user pressing a "Play" button in Winditor's UI.

Assuming that the user has an ISO root extracted, the process would proceed like so:

  • The user edits a map.
  • The user presses the "Play" button, which saves the current map state to file and places the files in the user's specified ISO root directory.
  • Winditor generates an AR code to force the game to load the edited map once Dolphin is started using the game ID 00000000, the ID for games running directly from a directory. (Alternatively, if it is found to be possible, a patch is applied to the game's executable to do the same thing.)
  • Winditor forks a child process and starts Dolphin with several command line parameters.
  • The user finishes testing their changes and exits Dolphin.

Dolphin has three CLI options that will be useful for this:

  • **-b, --batch **. Makes Dolphin close the main GUI when emulation is stopped.
  • -e, --exec=. Makes Dolphin run the specified file when the emulator is opened. In this use-case, the file would be ISO's executable.
  • -C, --config=.
    .=. This is used to set config options at runtime.

Additionally, Dolphin can be run in a "portable" mode by putting a file called portable.txt in the directory containing Dolphin's executable. This will force Dolphin to put its user directories there, allowing us to have a Dolphin configuration independent from the user's own configuration.

Crashes Apon Startup

I don't why but when I was setting up Winditior it crashed and now crashes apon startup

Don't recompile unchanged collision meshes

Opening a room and saving it with no changes can cause its collision mesh to have a larger file size than the original.

This can cause problems for rooms like Room3 of the kaze stage - the increase of size the DZB gets puts the room over the limit specified in the stage's MEMA entry for that room, causing the game to crash when trying to allocate memory upon entering the room.
The user can avoid this crash by increasing the allowed heap size by a few kb in MEMA.

But it would be better if there was a way to edit the room without increasing the DZB size, so Winditor could detect that a DZB hasn't been edited and just store the original into the ARC as is.

Can you Create Map Exits?

The issue is that when I create a new map link is trapped there. when I go to the object list, then open exit list I create an exit, and then choose the coordinates and the map, aaaaaaaaand nothing will happen no new exit. so could you please try to fix this or show me what I'm doing wrong thank you!

Implement a "Switch" parameter data type

Switch parameters are extremely common among actors but it's not immediately intuitive how they work. It might be helpful to split it from a single integer spinbox into a dropdown+spinbox combo widget.

The dropdown would allow selecting the type of switch, and then the spinbox would allow selecting the index of the switch within that type range:

  • Mem bit switch: 0-127 (0-127)
  • Dan bit switch: 0-63 (128-191)
  • Zone bit switch: 0-31 (192-223)
  • Door-cleared zone bit switch: 0-15 (224-239)
  • N/A Switch: 255 (no spinbox needed)

Camera Speed up

Camera often spawns far away from objects (in viewport) and the camera movement speed (editor) makes editing a slow process.

Add File -> Open Single Room option

Since the whole sea stage takes a long time to load in all 49 rooms and their actors at the same time, and runs out of memory on the 32 bit version, it would be useful to have the ability to load just one room.
The user would select the RoomX.arc file they want and Winditor would load that room and the Stage.arc and nothing else.

Also, maybe move the view camera with that room's MULT so it's not too far away from the loaded island.

Room visual/collision mesh import/export: Remember last used settings

These dialogs could save the value of each field to settings.json, and when you open them later restore those settings.

If the saved settings don't exist in the dropdowns (e.g. if you went to a different room) it could use select the first loaded room's "Main" mesh as the default.

Implement collision exporting

Collision data is now properly loaded and editable within the tool; however, the edited data can not yet be saved back to DZB. Exporting must be implemented; a framework already exists in CollisionMeshExport.

Scene BGM Editor does not change music

Changing the dropdown menus in the Scene BGM Editor menu appears to do nothing.
The changes appear to save as the new settings appear every time the editor is relaunched.
Entries can be added but not removed, as the remove button does nothing.

For sanity testing I took a simple map and removed all references to room settings, stage settings, events and various other settings.
I was still unable to track down where it would be playing music outside of the settings within Scene BGM nor change the music in Scene BGM.
Creating a new map and applying the settings of another map also did not work.

Steps to reproduce: Take any map and change the Type, Name and/or Wave Bank 1~4 values

Implement an ActorReferenceControl

Several entity types, among them paths and environment lighting, have references to other objects within the world. These references should be handled by an ActorReferenceControl, which will allow the user to select, remove, or replace the actor which it references.

When replacing the stored reference, the control will display a list of the entities matching the referenced object's type. While the reference will be stored as type WDOMNode, this type filtering will prevent the user from, for example, selecting a waypoint as a reference for the environment lighting's palette data.

Document all actor names, parameters, and models

Below is a list of all 437 actor classes in Wind Waker. An entry in this list should be checked off only once all of its actor names, English names, parameters, parameter values, and models have been documented in Winditor. Classes that are only partially documented should not be checked.

The number of stages in the vanilla game the class was placed in is included for reference.

Prevent collision hierarchy treeview from closing nodes on double click

Double clicking in the treeview for the collision hierarchy selects all triangles belonging to that node, but the default behavior of the treeview is to toggle the node's expansion status when double clicked. This behavior must be overriden to prevent double clicking from closing or opening the nodes.

Text editor won't open despite the existence of bmgres.arc

I am attempting to use Winditor's text editor, yet when I click on that option, the program claims that "bmgres.arc could not be found", even though that exact file is indeed within the game root. I have attempted this with multiple builds of Winditor and have met with the same issue for all of them.
problem

Sotware Licence?

Would like to improve this editor more, but not without it having a licence?

So that I know under which license I place my code.

For my local version I already programmed some key bindings.

Implement direct injection of modified data into an ISO

A QoL feature to streamline editing would be to have the tool able to push edited data directly into an ISO. We already have ISO support in WArchive-Tools, though the validity of the support should be tested before it is put into use. (It may be incorrect as it was created a long time ago.)

The user would be prompted to select an ISO. The ISO would then be loaded and reduced to a virtual filesystem. The user would be prompted to select a map to overwrite or to create a new map, and then the program would inject the new data and save the ISO back.

Attempt to create a custom map with the tool

Most functionality has been designed and implemented purely from a developer standpoint. As the tool edges closer to usability, it is crucial that it be used to create maps so that new features can be added and bugs can be found and patched.

Winditor focuses on the map setup - objects and lighting. It therefore cannot create models and collision meshes on its own. There are separate tools for these purposes:

With the model and collision components already created, Winditor can be used to place objects and adjust lighting, if the map's model is configured correctly. (A default JSON file could possibly be created to make sure the models can use map lighting.)

Issues and feature requests can be added to the Issues list as they are encountered.

Correctly implement databinding for WTransform and Vector3

WTransform is currently hooked up to the UI by way of a BindingVector3. Currently, it only has half the functionality required; it will correctly display the selected object's WTransform properties, and update as the object is moved in the viewport, but manual changes to the UI are not propagated back to the selected object.

Thoughts:

  • The UI may not be propagating correctly because of a mismatch on what is listening to which OnPropertyChanged() events.
  • It may be better to investigate other ways of making this work.

Implement X and Z rotation for actors

Winditor supports displaying and editing actor Y rotation, but not X and Z. This is because Wind Waker uses the X and Z rotation fields as parameter bitfields for many actors so Winditor's code handles them differently.

But there are still several actors that use them as X and Z rotation. Winditor currently does not support this. There should be a way to mark each of the rotation fields for a given actor class as either rotation or a parameter bitfield.

Retain all archive data for exporting/saving

At this time, any data other than room models and entity data is discarded. Additionally, only entity data is saved to file. While this is usable, it is inefficient.

The program should keep track of all the data that it loads so that it can save it back out, either "compiled" as archives or "raw" as the directory structure of the archives. The data should probably be stored in the World class..

Back to Rom?

Hi, I am a major noob when it comes to modding, and I looked everywhere for this, but couldn't find an answer. I don't know if I'm blind, or if this is common knowledge, but after you turn the original copy of a rom into a folder, how do you turn the folder back to a rom?

Crash when exporting via x64 build

When exporting stages on an x64 build, these lines cause a crash when the transform rotation it's exporting is (X: 0, Y: -0.707106769, Z: 0, W: 0.707106769).
On x86 the converted euler rotation is (X: 0, Y: -89.98501, Z: 0), but on x64 it's (X: 180, Y: NaN, Z: 180) and the NaN crashes it. Possibly floating point rounding error differences between x86 and x64.

Support viewing and editing Tingle Tuner messages

Similar to how Winditor supports the format the main game's text is in, it would be convenient to also support the text shown on the GBA Tingle Tuner.

These messages are located in the files files/res/Gba/msg_LZ.bin. The file is compressed with GBA LZ77 compression.

The encoding of the plain text in this file is simple, although the command codes are currently mostly undocumented:

01=A
02=B
03=C
04=D
05=E
06=F
07=G
08=H
09=I
0A=J
0B=K
0C=L
0D=M
0E=N
0F=O
10=P
11=Q
12=R
13=S
14=T
15=U
16=V
17=W
18=X
19=Y
1A=Z
1B=a
1C=b
1D=c
1E=d
1F=e
20=f
21=g
22=h
23=i
24=j
25=k
26=l
27=m
28=n
29=o
2A=p
2B=q
2C=r
2D=s
2E=t
2F=u
30=v
31=w
32=x
33=y
34=z
56=!
58=-
59=?
5F=.
60=,
63='
F207=<UNKNOWN_F207>
F30D=<UNKNOWN_F30D>
F30F=<UNKNOWN_F30F_MAYBE_INCREASE_FONTSIZE>
F310=<UNKNOWN_F310>
F50B=<UNKNOWN_F50B>
F50D0A=<UNKNOWN_F50D0A>
F60D0A=<UNKNOWN_F60D0A>
F610=<UNKNOWN_F610>
F615=<UNKNOWN_F615>
F619=<UNKNOWN_F619>
F61C=<UNKNOWN_F61C>
F623=<UNKNOWN_F623>
F91E=<UNKNOWN_F91E>
FC00=<BLACK>
FC01=<UNKNOWNCOLOR1>
FC02=<RED>
FC03=<PINK>
FC04=<GREEN>
FC05=<UNKNOWNCOLOR5>
FD= 
FE=\n
FF=<END>\n\n

Cyclic Warp Pots

Can't add more maps into the "Exit to First Pot in Cycle" slots.
(Same goes for Second, Third, and Noncyclic Warp Pot slots).

Refactor VisibleDOMNode to allow animations and multiple models

As in-editor rendering of objects becomes more advanced, it is becoming more and more necessary to allow one object to have multiple models associated with it. This goes for things like Gohdan and his hands, which consist of the main head/hand models and "slots" that his head and hands fit into, as well as most NPCs, which have their heads stored in separate model files. The DOM node responsible for rendering these objects must be able to render more than one mesh at a time.

Additionally, animation functionality was lost when the project switched from the ActorNode class to VisibleDOMNode. The animation functionality must be copied over. This is also a prime opportunity to implement BMT support, which was not present in the original implementation within ActorNode.

Restore the resource manager to keeping one copy of each resource

When the resource system was refactored, it was made inefficient to prevent all models sharing a resource from animating when only one instance of an actor using that resource is selected. The system must be modified to keep only one copy of each resource; this means that the aforementioned bug will persist (all models of a single type animating when only one instance is selected), but it will be much more efficient.

Room archives with multiple files sharing the same name are saved incorrectly

Room11.arc in M_NewD2 is a somewhat strange archive in vanilla, it has two different files named model.brk: one in the brk folder, one in the dzr folder. When Winditor's RARC implementation saves this archive, it seems to get confused by that and it saves a corrupted arc that no longer has a room.dzr in it.

Crash when attempting to open a stage (Twilight Princess)

I think this might be because I'm trying to edit a Twilight Princess stage (on the basis that they are similarly structured/formatted, at least to my knowledge), but thought it'd be worth flagging in case something else is going on.

If I try to open a room from this stage, nothing happens. If I try to open the whole stage folder, I get the following crash log:

----------------------------------------
Winditor crashed on: 09/04/2022 19:21:45

System.NullReferenceException
Object reference not set to an instance of an object.
   at WindEditor.Editor.Modes.CollisionMode.UpdateActiveMesh() in D:\WW\Winditor\Editor\Editor\Modes\CollisionMode\CollisionMode.cs:line 293
   at WindEditor.Editor.Modes.CollisionMode.OnBecomeActive() in D:\WW\Winditor\Editor\Editor\Modes\CollisionMode\CollisionMode.cs:line 246
   at WindEditor.WWorld.SwitchMode(IEditorMode old_mode, IEditorMode new_mode) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 248
   at WindEditor.WWorld.set_CurrentMode(IEditorMode value) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 23
   at WindEditor.WWindEditor.<get_SwitchToCollisionModeCommand>b__19_0(Object x) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 36
   at WindEditor.RelayCommand.Execute(Object parameter) in D:\WW\Winditor\Editor\Editor\UI\RelayCommand.cs:line 55
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at WindEditor.App.Main()

----------------------------------------
Winditor crashed on: 09/04/2022 19:23:14

System.ArgumentOutOfRangeException
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at WindEditor.WMap.LoadFromDirectory(String inPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Maps\Map.cs:line 66
   at WindEditor.WWorld.LoadMapFromDirectory(String folderPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 155
   at WindEditor.WWindEditor.LoadProject(String folderPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 381
   at WindEditor.WWindEditor.OnApplicationRequestOpenProject() in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 136
   at WindEditor.WWindEditor.<get_OpenProjectCommand>b__3_0(Object x) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 27
   at WindEditor.RelayCommand.Execute(Object parameter) in D:\WW\Winditor\Editor\Editor\UI\RelayCommand.cs:line 55
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at WindEditor.App.Main()

The other thing I noticed is that it refers to the D drive, which in my case is my DVD drive - so it can't physically get any data from there (although it seems to be able to see its own code, which is actually on the C drive, without issue).

Playtesting: Allow user to set emulator path

Currently if the user tries to use the playtest feature Winditor will crash because it tries to launch Dolphin from the hardcoded path dolphin\Dolphin.exe. The options menu should let the user set the path to where they have Dolphin installed.

Possibility to enable editing BMG Files - Text Files Zelda Twilight Princess HD

Possibility to enable editing BMG Files - Text Files Zelda Twilight Princess HD

These files are within the .arc files of the game.

Various sample files.

https://drive.google.com/file/d/1v0eTh51u-7TCkOTKw_JydDKXCRWSXTnU/view?usp=sharing

Header:
4D 45 53 47 62 6D 67 31 00 00 01 C0 00 00 00 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 49 4E 46 31 00 00 00 A0 00 0F 00 08 00 00 00 00 00 00 00 01 00 01 00 07 00 00 00 02 00 0E 00 14 00 00 00 03 00 1B 00 1F 00 00 00 04 00 24 00 29

another

4D 45 53 47 62 6D 67 31 00 04 68 A8 00 00 00 05 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 49 4E 46 31 00 01 86 C0 13 88 00 14 00 00 00 00 00 00 00 01 00 01 00 00 02 10 01 00 FF 00 00 00 00 00 01 00 00 00 00 23 00 02 00 00 02 10 01 00

Refactor paths and waypoints to have waypoint properties

As part of a refactor on paths and waypoints, these objects must be modified to have a waypoint reference in them.

Paths will require a FirstPoint property, which represents the beginning of the path.

Waypoints will require a NextPoint property, which represents the next point in the path that the waypoint belongs to.

The entire system will make up a linked list:

Path --(FirstPoint)--> Waypoint --(NextPoint)--> Waypoint --(NextPoint)--> Waypoint (NextPoint is null)

Chains should be able to be broken by marking a waypoint's NextPoint property as destroyed. Similarly, chains should be able to be created by setting NextPoint or FirstPoint to new waypoint objects.

Categorize the entity properties and mark them as hidden/uneditable as needed

The templates that define the auto-generated properties in the entity templates must be categorized. Currently, all properties without an explicit category name are marked as belonging to a "Misc." category. Most of the categories will probably be " Properties", such as "Spawn Properties" and "Path Properties."

Properties in these templates can also be marked as Hidden - demoting them from properties to private fields - and Editable, allowing them to be edited by the user.

  • Most values should be made editable by the user.
  • Certain types of properties - such as indices and offsets - should be marked as Hidden.

Refactor environment lighting to allow immediate changes to colors in the viewport

At the moment, environment lighting colors can be modified and saved to file. However, the colors are only loaded once at scene loading, and are not refreshed even when the colors are modified by the user.

The current organization of the environment lighting must be refactored so that there is as little copying as possible. Continuous updates to the color data at each tick() are not required as long as the data is bound to the UI correctly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.