Giter VIP home page Giter VIP logo

vuengine-studio's Introduction

VUEngine Studio

VUEngine Studio is a custom integrated development environment (IDE), tailor-made for Nintendo Virtual Boy game development with VUEngine, our versatile, object oriented Nintendo Virtual Boy game engine.

License

VUEngine Studio is built upon Eclipse Theia, a framework for building cloud and desktop IDEs using modern, state-of-the-art web technologies.

The following third party binaries that are shipped with VUEngine Studio come with their own licenses:

  • GCC by the GNU Project, with patches for V810 by ElmerPCFX
  • GNU Make by the GNU Project
  • Grit by Jasper Vijn, with patches for Virtual Boy by dasi
  • HyperBoyCli by thunderstruck
  • HyperFlasherCli by thunderstruck
  • MSYS by the MinGW Project
  • prog-vb by William D. Jones
  • Retroarch Web with Beetle VB Core by the RetroArch and Mednafen teams

Usage

Documentation on how to use VUEngine Studio can be found at https://www.vuengine.dev/documentation/.

Building

Prerequisites

Download node.js and install. Preferrably use nvm (Node Version Manager). On Windows, you'll need to grab nvm-windows from https://github.com/coreybutler/nvm-windows instead.

Make sure you're using node 18.

nvm install 18
nvm use 18

Install yarn.

npm i -g yarn

On Linux systems, you'll need the following packages:

sudo apt-get install -y g++ gcc make python3 pkg-config libx11-dev libxkbfile-dev libsecret-1-dev

On Windows, install Visual Studio Build Tools.

Install Python.

Init

After cloning, load git submodules with

yarn modules:init

They can be updated at a later point with

yarn modules:update

Build

To build the application in production mode:

yarn && yarn build && yarn download:plugins

For a fast, less resource intensive build use the following. This will not minify the frontend app.

yarn && yarn build:dev && yarn download:plugins

Development

Open two terminals and execute one of the following commands in each.

yarn watch
yarn electron start

The first will do an incremental build on every code change you do. The latter will start the Electron frontend. Reload (CMD/Ctrl+R) to load your changes.

Package the application

yarn electron package

The packaged application is located in applications/electron/dist.

Create a preview application (without packaging it)

yarn electron package:preview

The packaged application is located in applications/electron/dist.

Running E2E Tests

The E2E tests basic UI tests of the actual application. This is done based on the preview of the packaged application.

yarn electron package:preview
yarn electron test

Reporting feature requests and bugs

If you encounter bugs in VUEngine Studio please consider opening an issue in the VUEngine Studio project on Github.

vuengine-studio's People

Contributors

jorgeche avatar kr155e 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

Watchers

 avatar  avatar  avatar  avatar  avatar

vuengine-studio's Issues

Finish new project creation

  • Verify the "new project" dialog is working fine.
  • Adjust new project with custom name, author name and maker code

Flash Cart config widget

Create a widget to ease working with flash cart configs. Holds a list of flash cart configs with "+" button.

Button to reset to default as well on top.

Generate config.make file

We don't have a way to generate custom editors from JSON schema files, yet and no code generation mechanisms either. But we'll need to implement something to generate config.make, otherwise the plugins sidebar won't do anything useful.

Aborting builds can lead to inconsistent state

Aborting builds during preprocessing can lead to an inconsistent state of the build folder, in which builds are no longer possible. Thus, the build folder should be cleaned when a build is aborted during preprocessing. To not unnecessarily clean, and thus increase the build time on next run, it should probably be checked if any files have been actually processed during any of the preprocessing steps.

Custom zoom logic

Bring back custom zoom logic from early VUEngine Studio version. Prevent too high or low zoom levels.

Include built-in libs in workspace

Add option to include the configured VUEngine-Core, VUEngine-Plugins and user plugin libraries in the workspace, without the need for a workspace file.

Preference should be set to false by default, since this is not neccessarily interesting for regular users.

Build not working when folder contains whitespaces

Can't name the application "VUEngine Studio", or otherwise the build is not working, due to the whitespace.

Likewise, building won't work if the user installs the application to any folder that contains whitespaces. Same problem probably occurs when trying to build a project that's inside a path containing whitespaces.

Create additional templates

Create more game templates, or rather, plugins for GameState and respective entities.

  • RPG
  • Top-down racing game (based on Formula V code)
  • Falling block puzzle
  • Shoot'em Up
  • Point & Click/Adventure

Might mix them all into a single game template, akin to GB Studio's sample project.

Cache data on code gen

When doing more complex code generation, i.e. regenerating all .lang.json files, cache retrieved data to increase performance.

Fix build times

Investigate why build times are much higher in VES than they are when building through the terminal.

Might have to do with file watchers, output parsing or such?

Get application working on Windows

  • Fix filepath issues
  • Get build working
  • WSL support, include Linux gcc
  • Get packaging working
  • Fix path problems in "New Project" dialogue
  • Test extensively

Fix various emulator issues

  • Queueing is not working correctly
  • Sometimes ROM is present, but not detected by emulator. In that case, the build starts instead.
  • Emulator is not persisting save data
  • Focus gets lost when emulator is dragged to sidebar
  • Disable toolbar while emulator is loading/starting
  • Keys bindings must only trigger when emulator is focused
  • Introduce global theia-button::active state (better feedback when clicking a button)
  • If the run command is executed when the emulator is already active, it should be opened and reset.

Trim msys archives

msys archive is huge, we can pobably shave a lot of unnecessary files from them.

JSON schema editors and code generation

  • Add custom editors.
  • Generate forms from JSON schema and generate code on save
  • Include version numbers in JSON schema files.
  • Need a mechanism to automatically update project's config files according to engine's schema files.

Idea: build archive

Store last x builds, e.g. in build/archive/output_20210910221805.vb.

Also store logs and make those inspectable in build widget.

Add quick links to launch ROMs in emulator.

Refactor flash carts widget

  • Allow to flash to specific carts (show flash button for each cart if there's more than one)
  • Update to latest hfcli and direct-to-flash programming
  • Parse HF32 progress
  • HF32 and HyperBoy port detection
  • Refactor pad function to use FileService instead of fs
  • Display warning and skip flashing if cart is too small to hold ROM
  • New events for flash start/succeed/fail
  • Tabbar decorators for above events + number of connected carts
  • Bug: Losing flash progress state when reconnecting any cart
  • Generalize parser and expose to flash carts config
  • Add support for additional actions. Can be useful for HyperBoy's save/load savegame feature.
  • Bug: Not flashing after being queued.
  • Bug: If one flash cart fails while another one starts, the overall process breaks
  • Allow to select any ROM for flashing

Rumble Pack Test Tool

  • Rumble Pack Test Tool to test drive effects and effect chains.
  • Status bar items when connected, links to test tool
  • Additional custom editor for effects, tailored for VUEngine rumble implementation

Customize workspace file name

  • Change .theia-workspace to a custom name
  • Change file dialog (and other) labels accordingly

Note: This ticket is still blocked, because the respective parts of Theia still have to refactored to be changeable via DI.

Custom emulator widget

Create a widget to ease adding new custom emulator configurations. Holds a list of emulator configs with "+" button.

Each config has these fields:

  • Name: text input, required.
  • Path: text input with file select button (like on new project dialog), required
  • Args: text input, preset with value "%ROM%"
  • Default: checkbox, checking it will uncheck all other config's default checkbox

Name, Path and Args go into emu config, default goes into default emulator config.

On top of list, the Build-In Emulator is listed. It has a default checkbox as well. It cannot be removed.

Shows a notice on top when emulator preferences have changed with a button to resync the widget.

Fully remove debug features

Almost done, although not everything could be removed, yet.

  • Remove Preferences->Extensions->Debug (-> bindDebugPreferences)

System notifications

Implement system notifications for long running processes like building or flashing.

Add screenshot functionality to emulator

Add screenshot functionality to the emulator that lets you capture the screen and then allow you to crop and annotate the image for faster communication in dev teams.

marker.js?

Build not working with multiple windows open

When opening multiple VUEngine Studio windows, pressing the build button only works properly in one of them (it seems that the last opened one). Closing all but the original window doesn't fix the issue and VES has to be restarted for the building to work again.

Refactor Documentation

  • Use custom WidgetOpenHandler, like plugins widget, to open docs by URI.
  • Highlight currently opened doc page in tree
  • Add "collapse all" command to tab tool bar

Build widget search

Allow to filter the build widget by a search word. We should be able to get that feature almost for free by refactoring the build log to be a Tree.

Build widget enhancements

  • Color code on warnings - Color progress bar yellow once a warning appeared in the log
  • Introduce new status "Build successful (with warnings)"?
  • Automatically open widget when a build failed

Auto Updater

Implement inline Auto Updates via Electron update service.

  • Get code signing and notarizing working on Windows and Mac
  • Implement application dialogs
  • Tie up Github releases

Browser version

Get VES to compile for, and run in, the browser. So we could potentially offer a web-based version.

ROM size info

After a build succeeded, determine the output ROM size and display it in the build widget.

Implement image conversion

Implement image conversion via grit using individual image config files.

Include option to specify storage area: "ROM Space" (default) or "Expansion Space".

Auto convert when an image or a .image.json file has been changed.

Refactor emulator

  • Fix focus
  • Fix button remapping
  • Backport latest advancements from PVB to VES.
    • Fullscreen
    • Fixed button assignments (toggle slowmotion)
    • EmulatorLoaded event
  • Load emulator in iframe via http -> Endpoint class?
  • Figure out mapping low battery toggle
  • Start vb files in the configured default emulator

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.