GithubHelp home page GithubHelp logo

casualyt31 / computerwars Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 0.0 78.26 MB

Advance Wars engine for the Windows and Linux platforms

License: MIT License

advance-wars angelscript cpp game game-development game-engine linux windows

computerwars's Introduction

Computer Wars

Advance Wars engine for the Windows and Linux platforms. Planned features:

  • Customisable Advance Wars engine: countries, graphics, units, terrains, COs, etc. will all be customisable, as well as a lot more.
  • The ability to not only modify the game using AngelScript but also the ability to modify the engine itself if you so wish.
  • Map maker.
  • Internet play.
  • Campaign engine.
  • Cross-platform: Windows and Linux. I may also support macOS if the stars align.
  • Controllable via mouse, keyboard, or gamepad/joystick.
  • Ability to easily add in Artificial Intelligence (implementing the AI is not a main goal, but it will be invaluable for the campaign side of the engine).
  • In-depth documentation, tutorials, and examples once the project is ready for release.

Starting From "Scratch"

Since the release of version 0.0.5, I have been reworking the game engine from the ground up. I'm hoping to copy over a lot of existing code, so hopefully, it will not take extremely long to get to where I left off (0.0.5).

Until version 0.0.6 comes out, I can't guarantee a functioning game. Check out the 0.0.5 tag instead if you want to play around with the latest version.

Tracking Progress

I've moved over to Jira and Confluence from Trello. Unfortunately, Jira is not publicly accessible in the free version, so I will have to grit my teeth and make use of the GitHub Projects feature to provide a high-level overview of my progress publicly. The epics and stories in my Jira will also be given cards on this repository's project page.

Dependencies

Todo (I likely won't be changing these much, if at all, so check 0.0.5).

Links

Gitmoji

I like the idea of Gitmoji, but I find that there are a lot of emoji for the same thing, and some that are missing. So I decided to use my own emoji:

Coding

Emoji Name Meaning
✨ sparkles Add new feature/s.
πŸ”¨ hammer Update/improve behaviour of existing feature/s.
πŸ› bug Fix a bug.
🎨 art Improve the structure/format of the code.
🚧 construction Commit code that is a WIP.
♻️ recycle Refactor code.
πŸ’₯ boom Introduce breaking changes.
πŸ”₯ fire Remove code, tests, or files.
⚠️ warning Fix code causing compiler warnings.
β›” no_entry Fix code causing compiler errors.

Testing

Emoji Name Meaning
βœ… white_check_mark Add passing test.
❌ x Add failing test.
πŸ§ͺ test_tube Write tests that have not yet been run.

Documentation

Emoji Name Meaning
πŸ“ memo Add or update documentation.
πŸ’‘ bulb Add or update source code comments.
πŸ“„ page_facing_up Add or update markdown files (readmes, licence, etc.).

Assets

Emoji Name Meaning
πŸ”§ wrench Add or update CMake, Doxygen, and other development scripts.
πŸ–ΌοΈ framed_picture Add or update art assets.
🎡 musical_note Add or update audio assets.
πŸ“œ scroll Add or update JSON assets, or AngelScript assets that override JSON assets during execution.
βš™οΈ gear Add or update binary assets.

Dependencies

Emoji Name Meaning
⬆️ arrow_up Upgrade dependency.
⬇️ arrow_down Downgrade dependency.
βž• heavy_plus_sign Add dependency.
βž– heavy_minus_sign Remove dependency.

Git

Emoji Name Meaning
πŸ”€ twisted_rightwards_arrows Merge branches.
πŸ”– bookmark Release new version.

computerwars's People

Contributors

casualyt31 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

computerwars's Issues

Update repository

Add gitignore. Cleanup file structure a little once I've completed Doxygen documentation.

Integrate AngelScript

Complete scripts class: figure out the best way to incorporate AngelScript. Multiple modules or a single module? Hot reloading? Caching? How to best reuse context objects?

Update code documentation: use Doxygen

Instead of maintaining a separate documentation file, I should include documentation in the code which I can then use to generate separate documentation files using Doxygen.

Refactoring Required

I'm making progress, but I've hit a small problem while making my game engine classes drawable (having to pass a raw pointer of an army to a unit via setOwner() because there is no easy way to create a weak reference to this using weak_ptr). It should be easily fixable, but this requires a good look at how I've designed my classes up to now, in particular paying attention to how I've linked my classes up and how (shared_ptr or weak_ptr, unit's owner (army) and army's unit (unit), etc.).

I'd really like to keep this design approach of maintaining circular references between objects (unit-army, tile-army, etc.), because it's really easy for the client to interact with (I can just access a unit's army directly without having to perform multiple calls like I had to in my old version of the engine, which was [thankfully] not public), and the use of shared_ptr and weak_ptr make handling circular references a breeze.

My idea is to introduce factory functions which will automatically handle these links when creating new units or tiles, for example. I'll need to adjust my code design accordingly, though, so I'll be going back to the drawing board for a short while.

Update Documentation

Now is a good time to update the documentation fully with what I have so far. After this, I probably need to work on the fundamentals of the CO classes, and then work on the army class, an instantiation of which represents an army on the map.

Carry on with Terrain and Unit classes

Fix up the unit class and separate β€œstatic” and β€œdynamic” data into two separate classes (follow UnitType-UnitBank-Unit architecture I worked on privately).
Ensure terrain classes work and refractor behavioural methods away: I will deal with this at a later point where I will have the most knowledge of how everything will fit together.
Start to think about how I’m going to manage things like pipe seams: terrain tiles that are treated as uncontrollable units that can be attacked.

Design Game Engine Architecture

Now that I've had a stab at making the actual engine, I can see where I've gone right and where I've gone wrong, and refactor now before it becomes too difficult to do so. Please see main.cpp for more details.

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.