Giter Site home page Giter Site logo

worldsmith's Introduction

Worldsmith

Open source Dota 2 Mod Editor inspired by Warcraft 3's World Edit.

You can contact me on IRC at #dota2mods on irc.gamesurge.net.

Looking for builds? You can get the latest build here

Contributing

Like this project? Want to help? Here are a few ideas:

  • If you can, please Donate to keep the project running.
  • If you can program, I appreciate pull requests. Please see the pull request guidelines below.
  • If you can help translate Worldsmith, please get in contact with me or submit a pull request.
  • Tell the world about Worldsmith.

Credits

Current Team

  • RoyAwesome
  • SinZ
  • Aderum
  • penguinwizzard

Without a few people, this project would be much much harder. In no particular order:

  • penguinwizzard for figuring out how to write maps.
  • tet, Sir_Kane, and hex6 for finding the strings for most of the flags and enums.
  • hex6 for doing the legwork for setting up translations.
  • Quintinity for cleaning up the quality and doing incredibly helpful quality work.
  • OrangeSodaSmurf for providing a coupon for a free domain name.

Translation credits

  • Swedish - hex6

Compiling the Source

All major dependencies are included in the repository. You may have to update submodules if you have errors with KVLib and Graph.

Worldsmith also relies on some NuGet packages. If you are using Visual Studio 2012 or 2013, this will be automatically handled. If not, you need to install NuGet and restore the dependencies.

Worldsmith was created with Visual Studio 2015.

If you change any of the data schemas, be sure to run the ClassGen build target. This will update the data class definitions.

Pull Requests

I greatly appreciate pull requests, but I ask contributers to follow some guidelines.

  • Worldsmith uses Microsoft's C# style guide.
  • Please follow the general style of the rest of the code base.
  • Use spaces, not tabs.
  • Use Windows line endings.

worldsmith's People

Contributors

antonaderum avatar b2zeldafreak avatar hex6 avatar hydrobrain avatar penguinwizzard avatar robinka avatar royawesome avatar sinz163 avatar thebigcheeze avatar vladmarica 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 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

worldsmith's Issues

Object Viewer Context Menu

Right clicking on the object menu should give some context menu options.

  • Open in Text Editor - Opens the selected object in the text editor. The code for this is written, it just needs to be hooked up to the context menu (DotaDataDocument.OpenTextEditor())
  • Delete Object - If the object is not in the VPK, we should be able to delete it.
  • Rename Object - not sure if this can be better done in the property view.

Lua enhancements

Integrating Lua tools with knowledge about the other components is a big step. This is a meta-issue, assign other issues as dependencies for this one for individual components to get Lua integration.

Issue when reading DotaData

we should check whether the addon dictionary is exist or not, and let a reset of addon path and dota2 path then ask the user to set it again, or an error will occur like the picture below.
anyway, good job and carry on!

dotadata

Sound Managment

Figure out what the sounds are, and use them for automatic suggestions in places where sounds are required.

Particle Helper

Particle helper that auto-suggests valid particles in places where they're required, checks to make sure any particles that you use are defined, and helps you copy particles from regular Dota to your addon directory.

Asset Picking

For fields that need asset references (Model, sounds, icons), we need a dialog to select the asset in the project.

The data schema must be annotated with what asset type is required in that field.

Assets must be discovered and registered inside the Addon as well as the VPK.

A dialog must be created to list the assets of the proper type and select them.

Improve the Asset Loading Screen during initial load

Currently it just shows a loading bar and some text.

It should have a header image, some text describing the Worldsmith project, linking to the project page and displaying credits.

It could play a little bit of dota music when starting up (akin to how the Warcraft 3 editor played music when starting up), but that is purely optional.

Multiple VPK Support

Worldsmith can only open one VPK at a time. Dota has multiple VPKs that it draws from and worldsmith should be able to open and index all of them

RunScript Auto-script Linking, Lua function discovery

When adding a RunScript Action, we would normally want to quickly define the ScriptFile and Function and jump directly into the ScriptFile path, create a function and start coding it.

What could be added is:

  • Singe click on the Function value lets you edit the name as usual, but also tries to:
    • If the function doesn't exist yet, gives an option to create a basic definition inside the lua ScriptFile
    • If the function already exists, it displays a hovering lua editor, positioned in the function:

img

  • Double click on the Function name could do something similar:
    • If it doesn't exists, create it and enter the full editor (not hovering as scripts can be long and use helper functions internally), just open in another tab and position the cursor at the beginning of the function.
    • If it exists, open the full editor and position the cursor at the beginning of the functio
      • or if you want to go full awesome, the last recorded position where the user left editing it!

Library management

Set of libraries for auto-download through a package manager. Stuff like BMD's physics and timer, and statscollection.

Documentation: Schema Files

A wiki page should be written describing how DotaObjectSchema classes are generated. It should explain the Key-Value fields, what they do, and how to generate the classes.

Document Management.

Many documents in a dota addon can be opened in different contexts.

Most .txt files can be opened as either a Plain Old Text file or as a Key-Value file (parse the KVs, display them in a grid view). Something should be created to allow editing in both contexts, then saving one editor saves the file and reloads both editors with the new data.

Certain files (npc_units_custom.txt, npc_items_custom.txt, and so on) should be opened with their own special editor for modifying properties. They are one big file to hold a ton of data objects, and it would be better to have them in their own tree view.

Ideally, we should disallow directly editing those special files, and instead route them into modifying each data object individually, then compile all of those objects into one big file when the project is saved. This would prevent having a potentially infinite number of editors trying to save and reparse these special files, and force users into the workflow of creating individual units/objects and editing them.

Document Modified Notification

If a document is modified by one editor, the changes need to be propagated to all open editors for that document.

For example, if you modify a property of a unit in the property editor, the text editor for that unit should be updated with the change.

Project Viewer does not have an Icon

We do not have a good icon for this. It should be something related to files/folders but also dota related.

If someone is feeling clever, doing a 16x16 dota logo with a folder in the middle (instead of the division sign) might be funny/clever/good.

Non-empty new addon options

Similarly to VS, have a few options for new projects. For example, one could be barebones; another could be 'vanilla dota', which just has vanilla dota set up, for the addons that are slight gameplay modifications.

Improve the Object Property Editor

It's pretty fugly. That control could be improved to be less ugly.

This is probably a big project. There might be some 3rd party property editor controls that we could leverage for this

Some features that would be nice:

  • Searching keys
  • Flag editors
  • Categories

Basic Dota Environment Simulation

This is kinda a big one. Integrate a bunch of parsers and a LuaVM, and have buttons to trigger events. Should handle the same way that Dota would (but without the same interface, and without automatically stepping forward in timesteps). Any system not simulated would have to be handled manually by the user.

Basic Map Logic Handling

There are many cases in which developers will want to have calls from their map logic to various scripting functions. It would be helpful if WorldSmith would present a list of these to the user while coding relevant Lua code, so that it requires less back-and-forth checking.

Context menu for document tabs

Document tabs should have a context menu with a few options.

  • Save (saves the current document)
  • Save-All (saves all open documents)
  • Close (closes editor)
  • Close All (closes all editors)
  • Close All to the Left/Right

In-Editor Console

A Console Panel should display console output of the program as well as take input for when we integrate a Lua VM into Worldsmith

Saving Data Objects is broken

KVLib properly serializes the full KV tree, but certain keys should be excluded if they are default. This code is mostly working, it just needs to be tested and corrected.

Trying to open a removed addon at start causes exception

If you remove a project that was loaded when you exited WorldSmith and then start WorldSmith it will error out on the function ProjectView.RecursivePopulateFromProject with DirectoryNotFoundException.

We need to handle removed/renamed directories when starting WorldSmith,

Documentation: Basic Usage

We need a wiki page on basic usage and how to use Worldsmith. Should cover Addon Creation/Loading, basic Unit creation, and an overview of the different panels.

Performance Issue with Project View

Iterating through every file in the VPK takes a significant amount of time. We should either look into reducing this time or running the iteration/placing of tree nodes in a BackgroundWorker and not block the UI.

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.