Giter VIP home page Giter VIP logo

hellspawner's Introduction

NOTE

This project is currently being split into an Engine+Toolset (called Abyss Engine) and the game as a project (still called OpenDiablo 2). The new project repo is located here:

https://github.com/AbyssEngine/

OpenDiablo2

CircleCI Go Report Card GoDoc License: GPL v3 Discord Twitch Status Subreddit subscribers

Logo

Patreon


OpenDiablo2 is an ARPG game engine in the same vein of the 2000's games, and supports playing Diablo 2.

The engine is written in Go and is cross platform.

The project does not ship with the assets or content required to play Diablo 2. You must have a legally purchased copy of Diablo 2 and its expansion Lord of Destruction installed on your computer in order to run that game on this engine.

If you like to contribute to OpenDiablo2, please be so kind to read our Contribution Policy first.


Documentation

Stay awhile and listen ...

โšก Project Info

  • ๐Ÿ‘‰ Current Status ๐Ÿ‘ˆ - what you should focus on
  • Roadmap - Planning ahead
  • Design - High-level overview of the OpenDiablo2 org and its projects
  • FAQ - Common questions from new people to the project

โญ For Users

  • Purchase - Buy the official game from Blizzard
  • MPQ - Locate the MPQ files
  • Install - Install OpenDiablo2 to your system (Linux/Windows/MacOS)
  • Run it - How to play the game

๐Ÿ”ฅ For Developers

  • Building - Instructions for building the project
  • Development - Instructions for developers who want to contribute
  • Profiling - Debug performance issues
  • Debugging - Common errors and pitfalls

Screenshots

Main Menu

Select Hero

Select Hero

Gameplay

Inventory Window

Game Panels

Additional Credits

Legal Notice

Please note that this game is neither developed by, nor endorsed by Blizzard or its parent company Activision.

Diablo 2 and its content is ยฉ2000 Blizzard Entertainment, Inc. All rights reserved. Diablo and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.

ALL OTHER TRADEMARKS ARE THE PROPERTY OF THEIR RESPECTIVE OWNERS.

hellspawner's People

Contributors

1dz87 avatar ajith1994 avatar b4sen avatar bbrucee avatar danmaute avatar darthgandalf avatar dependabot[bot] avatar drpaneas avatar essial avatar github-actions[bot] avatar gravestench avatar gucio321 avatar ianling avatar jimmycann avatar madwizard avatar pairofdocs avatar smoak avatar ziemas 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  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

hellspawner's Issues

Create an electron shell

We need to create the shell application for HellSpawner. This needs to be an electron app.

The shell should use and React and the React component version of Semantic UI.

Sort folders at the top

On the MPQ tree view, we need to sort the folders to the top of the list (and alphabetically sort the other files).

MPQ Navigation

We need a tree view component on the left of the screen that shows all listable files for the loaded MPQs. It should have two modes. The first is a "MPQ" view, which separates the MPQs and lists the files individually. The second is a "merged" view, which shows all the files in one tree, using the same priority that OpenDiablo2 uses. Not all functionality may be available for the actual data, so shelling the view with test data is fine for now.

This requires #1 and #2 to be completed first.

Add ability to export files/folders

Add the ability to extract the selected file/folder/mpq (based on what node is selected). This should be done via a context menu, but a main menu option is OK for now as well.

UI Feature: Pager Widget

A Pager does the following:

  • contains a collection of child widgets
  • renders one and only one child widget at a time
  • has an "active child" property and a means of changing the active child

UI Feature: Widget Interface

A Widget is an interface which has the following properties:

  • a render method
  • an update method
  • the update method needs to return a dirty boolean that signifies if the widget changed in any way
  • a method that returns the "requested" size (the minimum width/height to render the widget)
  • a method that "invalidates" the widget state a forces the widget to recalculate

NOTE: the "requested" size is not usually going to be the actual rendered size of the widget

UI Feature: Progress Bar

progress bar needs:

  • has a "progress" property which is a float64 that is clamped from 0.0 to 1.0
  • has a means of setting/updating the progress property
  • has an orientation property (horizontal or vertical)
  • by default, the progress property is displayed as a percentage
  • optionally, a custom caption can be set which overrides the default percentage display
  • caption does not show for vertical orientation

UI Feature: Hbox & Vbox Widgets

HBox (Horizontal Box):

  • a container for other widgets
  • automatically places and sizes the child widgets horizontally
  • has an "alignment" property, which is one of "left", "middle", or "right"
  • can set the padding between the child elements (specified in pixels)
  • can add child widgets
  • as child widgets are added, the order is left to right
  • can set/get the current alignment

VBox (Horizontal Box):

  • a container for other widgets
  • automatically places and sizes the child widgets vertically
  • has an "alignment" property, which is one of "top", "middle", or "bottom"
  • can set the padding between the child elements (specified in pixels)
  • can add child widgets
  • as child widgets are added, the order is top to bottom
  • can set/get the current alignment

UI feature: Main Menu Widget

depends #30
depends on #31

Contains a collection of "Menu Items" that are displayed horizontally

Each menu item will have:

  • a caption (the text shown on the menu-item box)
  • optional icon
  • enabled/disabled state
  • an accelerator key (a hotkey)
  • a visibility property
  • an optional sub-menu

UI Feature: Checkbox

Checkboxes:

  • needs an OnChanged callback that takes the new state as an argument
  • need a caption (the text to display)
  • needs to be tri-state, not simply on/off:
    • checked
    • unchecked
    • half-checked (typically used for nested lists)
  • need an "enabled" property
  • need a "visible" property

Create DAT (palette) viewer

We need a viewer to show DAT files. These files are just an array of 256 colors. We simply need to show a grid or table of these values.

UI feature: "floating" widgets

Floating widgets:

  • Modal, consume all input
  • renders above all else on the screen
  • needs to implemented as a stack
    • if the stack is empty, there is no modal widget
    • if the stack is not empty:
      1. render the root widget
      2. render all widgets in the stack, bottom to top
      3. update only the top-most widget in the stack

UI Feature: Scrolling widget

We need a ui widget that acts as a container for another widget such that:

  • the parent widget does not render anything outside of its bounding box
  • if the child widget is not fully contained by the parent widget bounding box, the parent widget displays scrollbars
  • the parent widget should support vertical as well as horizontal scrolling
  • vertical scrolling should be possible with the mouse wheel
  • horizontal scrolling should be possible by using the mousewheel and holding shift

Create file explorer

We need something vaguely resembling a filesystem explorer for browsing MPQ's.

As we would be emulating a file explorer, we would want the following features:

  • an area for displaying the current working directory/path
  • a button that navigates to the parent directory
  • a button that navigates to the root directory
  • a node object; is of file or directory type, displayed as an icon and a text label
  • when a directory node is clicked it will navigate the explorer to that directory
  • when a file node object is clicked, it will open an appropriate viewer for that file type
  • a Grid View layout for displaying nodes;
  • a List View layout for displaying files and directories

depends on #52

UI Feature: Tabs & TabView

Tabs:

  • has a string to display
  • has an optional icon
  • it can be close-able

TabView:

  • is a tab container
  • can re-order tabs
  • can add tabs
  • can remove tabs
  • needs a pager (depends on #34)

UI Feature: Menu Item

Menu items are individual entries in a menu.

Menu items need the following:

  • an OnClick callback
  • a caption (the text that's displayed on the renderable surface)
  • an optional icon
  • an accelerator key (which is also shown on the renderable surface)

UI Feature: Hover Tooltip

We need a hover tooltip for displaying information about what the cursor is actively hovering over.

When the tooltip is displayed, it should try to position itself such that its bounding box is fully visible.

This may need to be added to the base Widget interface

Enhance README

The readme needs some more details about the project, as well as a screenshot or two.

Create PL2 Viewer

We need an editor to show PL2 data files. The way I'm thinking to show it is to have a dropdown or list for the different types of palettes, then when you select the specific one, the RGB vales show up either in a grid or table.

Create WAV Player

Add a sound/music player that can play the WAV files (see the OpenDiablo 2 PlayBGM function for reference). It should list current/end time and a slider with play/pause/stop buttons, as well as a volume slider.

UI Feature: Radio Button

Radio buttons:

  • needs an OnChanged callback that takes the new state as an argument
  • need a caption (the text to display)
  • need a "group" name to group with other radio buttons
  • only one radio button per group can be selected/checked at the same time
  • need an "enabled" property
  • need a "visible" property

UI Feature: Images

We should be able to load an image from disk and display it on screen

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.