Coder Social home page Coder Social logo

sfttech / openage Goto Github PK

View Code? Open in Web Editor NEW
13.3K 394.0 1.2K 17.47 MB

Clone of the Age of Empires II engine 🚀

Home Page: http://openage.dev

License: Other

GLSL 0.47% CMake 2.00% Python 53.80% Shell 0.02% C++ 37.58% C 0.07% Makefile 0.10% QML 0.56% CSS 0.07% Cython 5.20% Nix 0.12% GDB 0.01%
game engine python c-plus-plus qt nyan opengl openage age-of-empires cmake multiplayer linux game-engine entity-component-system rts-engine cpp game-development cpp20 hacktoberfest

openage's Introduction

openage

openage: a volunteer project to create a free engine clone of the Genie Engine used by Age of Empires, Age of Empires II (HD) and Star Wars: Galactic Battlegrounds, comparable to projects like OpenMW, OpenRA, OpenSAGE, OpenTTD and OpenRCT2.

openage uses the original game assets (such as sounds and graphics), but (for obvious reasons) doesn't ship them. To play, you require any of the original games (AoE1, AoE2) or their Definitive Edition releases.

github stars #sfttech on matrix.org GPL licensed

Contact

Contact Where?
Issue Tracker GitHub SFTtech/openage
Development Blog blog.openage.dev
Subreddit reddit /r/openage
Discussions GitHub Discussions
Matrix Chat matrix #sfttech:matrix.org
Money Sink money sink

Technical foundation

Technology Component
C++20 Engine core
Python3 Scripting, media conversion, in-game console, code generation
Cython Python/C++ Glue code
Qt6 Graphical user interface
CMake Build system
OpenGL Rendering, shaders
Opus Audio codec
nyan Content Configuration and Modding
Humans Mixing together all of the above

Goals

  • Fully authentic look and feel
    • This can only be approximated since the behavior of the original game is mostly undocumented, and guessing/experimenting can only get you this close
    • We will not implement useless artificial limitations (max 30 selectable units...)
  • An easily-moddable content format: nyan yet another notation
  • An integrated Python console and API, comparable to blender
  • AI scripting in Python, you can use machine learning
  • Re-creating free game assets
  • Multiplayer (obviously)
  • Matchmaking and ranking with a haskell masterserver
  • Optionally, improvements over the original game
  • Awesome infrastructure such as our own Kevin CI service

But beware, for sanity reasons:

  • No network compatibility with the original game. You really wanna have the same problems again?
  • No binary compatibility with the original game. A one-way script to convert maps/savegames/missions to openage is planned though.

Current State of the Project

Important notice: At the moment, "gameplay" is basically non-functional. We're implementing the internal game simulation (how units even do anything) with simplicity and extensibility in mind, so we had to get rid of the temporary (but kind of working) previous version. With these changes, we can (finally) actually make use of our converted asset packs and our nyan API! We're working day and night to make gameplay return*. If you're interested, we wrote detailed explanations on our blog: Part 1, Part 2, Monthly Devlog.

* may not actually be every day and night

Operating System Build status
Debian Sid Kevin CI status
Ubuntu 24.04 LTS Ubuntu 24.04 build status
macOS macOS build status
Windows Server 2019 Windows Server 2019 build status
Windows Server 2022 Windows Server 2022 build status

Installation Packages

There are many missing parts for an actually working game. So if you "just wanna play", you'll be disappointed, unfortunately.

We strongly recommend building the program from source to get the latest, greatest, and shiniest project state :)

  • For Linux check at repology if your distribution has any packages available. Otherwise, you need to build from source. We don't release *.deb, *.rpm, Flatpak, snap or AppImage packages yet.

  • For Windows check our release page for the latest installer. Otherwise, you need to build from the source.

  • For macOS we currently don't have any packages, you need to build from source.

If you need help, maybe our troubleshooting guide helps you.

Quickstart

  • How do I get this to run on my box?

    1. Clone the repo.
    2. Install dependencies. See doc/building.md to get instructions for your favorite platform.
    3. Build the project:
    ./configure --download-nyan
    make
    
  • I compiled everything. Now how do I run it?

    • Execute cd bin && ./run main.
    • The convert script will transform original assets into openage formats, which are a lot saner and more moddable.
    • Use your brain and react to the things you'll see.
  • Waaaaaah! It...

    • segfaults
    • prints error messages I don't want to read
    • ate my dog

All of those are features, not bugs.

To turn them off, use ./bin/run --dont-segfault --no-errors --dont-eat-dog.

If this still does not help, try our troubleshooting guide, the contact section or the bug tracker.

Contributing

You might ask yourself now "Sounds cool, but how do I participate and get famous contribute useful features?".

Fortunately for you, there is a lot to do and we are very grateful for your help.

Where do I start?

  • Check the issues labelled with good first issue. These are tasks that you can start right away and don't require much previous knowledge.
  • Ask us in the chat. Someone there could need help with something.
  • You can also take the initiative and fix a bug you found, create an issue for discussion or implement a feature that we never thought of, but always wanted.

Ok, I found something. What now?

  • Tell us, if you haven't already. Chances are that we have additional information and directions.
  • Read the docs. They will answer most "administrative" questions like what code style is used and how the engine core parts are connected.
  • Read the code and get familiar with the engine component you want to work with.
  • Do not hesitate to ask us for help if you do not understand something.

How do I contribute my features/changes?

  • Read the contributing guide.
  • You can upload work-in-progress (WIP) versions or drafts of your contribution to get feedback or support.
  • Tell us (again) when you want us to review your work.

I want to help, but I'm not a programmer...

Then openage might be a good reason to become one! We have many issues and tasks for beginners. You just have to ask and we'll find something. Alternatively, lurking is also allowed.


Cheers, happy hecking!

Development Process

What does openage development look like in practice?

How can I help?

All documentation is also in this repo:

  • Code documentation is embedded in the sources for Doxygen (see doc readme).
  • Have a look at the doc directory. This folder tends to get outdated when code changes.

License

GNU GPLv3 or later; see copying.md and legal/GPLv3.

I know that probably nobody is ever gonna look at the copying.md file, but if you want to contribute code to openage, please take the time to skim through it and add yourself to the authors list.

openage's People

Contributors

heinezen avatar thejj avatar mic-e avatar velorums avatar maanooak avatar zuntrax avatar jon0 avatar tusharpm avatar jere8184 avatar pjonnala-eab avatar franciscod avatar jazzpi avatar detrumi avatar simonsan avatar duanqn avatar dmwever avatar goto-bus-stop avatar gellardo avatar vtec234 avatar tomatower avatar azrdev avatar edvinlndh avatar zzzhhe avatar lordaro avatar svkurowski avatar birch-san avatar johanhelsing avatar kev946 avatar nikhilghosh75 avatar zoli111 avatar

Stargazers

 avatar  avatar Molody avatar Avi avatar Ícaro Abreu avatar Bahadir avatar Edgar avatar  avatar Vincenzo La Spesa avatar  avatar Byihta avatar Paul Scarrone avatar Willson Arteaga avatar N Clements avatar M Mograbi avatar  avatar Humberto Alves avatar  avatar  avatar Mustafa Güray Şenova avatar Thomas Jinwoo Min avatar  avatar PBug avatar Marcus Bloomfield avatar neuralduck avatar Ruan avatar Marcelo Miletto avatar Ananda Umamil avatar Daniel Santos avatar Michael Ho avatar Zo Rajaonarivony avatar Jiayue Zhang avatar Tristan NGUYEN avatar meru avatar  avatar Can Özmen avatar Jędrzej Maczan avatar Michael Steshenko avatar Michael Stilson avatar  avatar Justin Chan avatar Benedek Szabó avatar Eusebiu A. Plesa avatar Pemoeda08 avatar Watcharachai Kanjaikaew avatar Jack Lee avatar  avatar  avatar Lim Kaleb Octavianus avatar Arthur Baldoqui avatar João Victor Duarte avatar Luiz Bills avatar Alexis Cramatte avatar plskyuwu avatar Felix Li avatar  avatar Khaled Ibrahim  avatar Ozan Müyesseroğlu avatar  avatar Prima Putra avatar AlmondHouse27 avatar  avatar Bruno avatar Karl avatar Chang Liu (Newt) avatar  avatar Sythinian avatar  avatar Daniel Gonzalez avatar Sanket Duthade avatar  avatar  avatar Fedor Kurmazov avatar  avatar William avatar Paulo Silva avatar Gibi avatar Pelikan.B avatar  avatar Yorgos S. avatar  avatar Anderson Fernandes do Nascimento avatar Andrea Centorrino avatar Luke Dao avatar Gaston Martinez Pannuto avatar Sebastian Döll avatar  avatar Drogunov Igor avatar AlinStoican avatar  avatar  avatar Andre Bossard avatar blankface avatar  avatar  avatar Jason avatar  avatar Adam Havlíček avatar Chris A James avatar  avatar

Watchers

Tim Hawkins avatar yoshimo avatar N Clements avatar Ole avatar dragonfly avatar Hans Rødtang avatar TMF_Archivist avatar Tomasz Wsuł avatar Neustradamus avatar herby avatar davidwei_001 avatar evandrix avatar AgBorkowski avatar Rakhmad Azhari avatar Mikal avatar  avatar Aleksandar Topuzović avatar Alfonso Saavedra "Son Link" avatar Flori avatar  avatar Qian Liu avatar yihao avatar JTRAG - James Trageser avatar Little Bear avatar  avatar Adelar da Silva Queiróz avatar Kamil Szatkowski avatar  avatar Tim Legge avatar Paulo Daniel avatar SUPER avatar Eugene Sturm avatar  avatar mingfeng.zhang avatar Benoit avatar Michał Janiszewski avatar Andre Kupka avatar Alif avatar Eivar Montenegro avatar  avatar Jose Fajardo avatar  avatar Jon Duffy avatar へすす  あるべると Baizabal avatar BaiLibin avatar  avatar Mikhail avatar daniel avatar hamlet avatar Michael Cheng avatar Samir avatar  avatar  avatar Michael Single avatar SwhGo_oN avatar Hygor Hernane avatar Vitaliy Talyh avatar  avatar hackme avatar Engür Pişirici avatar Eddy S. avatar Jens Feodor Nielsen avatar Cassie Peele avatar Peter Wagner avatar hunslater avatar Mike Ledger avatar  avatar  avatar Lu Ching Wen avatar  avatar Joseph Evans avatar  avatar Kua Fu avatar Peter Piwowarski avatar Kuba Niewiarowski avatar ZerQ avatar yoyo avatar  avatar Ivars Naglis avatar  avatar  avatar  avatar Morgan Baron avatar Ketaway avatar Viacheslav Shabelnyk avatar David Díaz avatar liaoyicong avatar  avatar  avatar  avatar  avatar Benjamin Stanley avatar Yassine avatar zhouzhenghui avatar  avatar Yan Chen avatar Michael Anthony avatar  avatar saasfreelancer avatar GP Wang avatar

openage's Issues

Support for multi-layer buildings (village center)

Buildings like the village center consist of multiple parts so that units can walk under roofs etc.

These layers have to be represented somehow, and rendered as one single building.
The draw layer priority is secondary and should be rather easy to implement afterwards.

Static code analysis

In addition to test cases, we should have some kind of static code analysis integrated into the buildsystem.

SDL rendering without OpenGL

It would be great to have simple SDL rendering without OpenGL for old & troubled video chips, that has no hardware acceleration for 3D & OpenGL.

Targets for media convert python module

Currently, the openage.convert script always executes the conversion in a fixed manner, the only adjustments possible are filename matches for archive extractions.

Please implement some job-like architecture so that each conversion task can be selected separately and grouped together to common conversion targets.

The file that currently hardcodes the conversion procedure is py/openage/convert/mediafile.py.

Create asset packs and automatically locate them with the engine

Implement an asset loader that overlays multiple asset source directories. For an installed game, this should be /usr/share/openage (installed by the package) and ~/.openage (the user-writable "userasset" folder).

You can also specify further paths to look for packs.

The userasset folder is used for storing files that are created by the user (e.g.: datapacks (converted game assets)), savegames, screenshots, etc.

The "asset locating mode" may be specified via --assets={dev, installed}. If not specified, it's auto-determined from the files in the folder where the executable lies (does openage_version exist?). dev => look in ./assets.

Performance optimization feature: Support packing folders in (tar) archives.

The AssetLoader takes an asset path (such as termcolors.docx) and an optional "on-modification" callback function (think inotify, manual "reload-assets" instruction) and returns a file-like object for reading (or raise an Exception).

All code in openage should rely on the AssetLocator instead of directly opening files.

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

build on ubuntu 14.10

Any luck getting it built on Ubuntu 14.10 ?

I keep getting this :
(I have all the libraries installed, just don't know how to communicate that to the build system)

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
(Required is at least version "3.3")
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
cpp/CMakeLists.txt:74 (find_package)

render the game version on screen

If people create screenshots which should illustrate positioning, rendering, etc.. problems, it'll be easier to debug if the used gameversion is directly visible.

The game version could be displayed in the lower left corner. Toggling its display with e.g. F3 might be helpful (like minecraft did it).

Find another solution to find python in cmake

Finding Python with cmake will not work on OS X if python3 is installed via homebrew.
See the cmake issue, the homebrew issue and #16 . There has not been any activity regarding the cmake issue since April.
An alternative solution is this cmake module. It's licensed under BSD. Details regarding licensing can be found here.
For a temporary fix when using homebrewed python3, use the following to configure the project *you might need to adjust the version):

  --raw-cmake-args \
  -DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/include/python3.4m/ \
  -DPYTHON_LIBRARY=/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib \
  -DPython_FRAMEWORKS=/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework

Windows support [$30]

Windows should be a major supported target either by native compilation or cross-compilation.

Openage currently builds fine under Win32 with some minor patches ( http://i.imgur.com/Hxpym3K.jpg ) but there is no documentation available or binaries. I'll document the steps i used to build for win32 below:

There is a $30 open bounty on this issue. Add to the bounty at Bountysource.

Holes in terrain with Age2HD media

After the game loads fully (took a while)

The map is shown with some holes on terrain. I don't know if it's caused by a difference in age2HD media content or by other bug related with the open driver (radeonSI)

openage_2014-10-31_11-01-05_00

Here are some additional info:

glxinfo:

name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB,
GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD ARUBA
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.3.1
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile}

lspci|grep VGA:

00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7520G]

I can also provide the output from the terminal while running openage. Where can I post the file?

Create nightly distro packages

Breaking off from #81...

I have openSUSE build working (download instructions).

I have fedora and openSUSE builds working (download instructions).

I have script created (which I need to commit somewhere, putting in package repo almost seems right, but not quite...I'll consider it). The script can be setup on cron, pick the latest commit, update package repo and .spec file for latest commit tar ball, and push changes to repo to trigger build. I'll get that setup on remote server in the future, could possible be done via travis as well.

It may also make sense to move to something like home:boombatower:openage as the repository? I was originally branching games repo since that was my target, but on my request to move into official games repo it was suggested that non-playable games are probably not a good idea.

It would be slick if we did the necessary work to support building for .deb packages. https://en.opensuse.org/openSUSE:Build_Service_Debian_builds Perhaps someone is familiar with deb packaging? Then we can get nightly builds for all major distros from one place!

Open Build Service (OBS) is great in that it provides the familiar fork/branch and pull request workflow for packaging in addition to allowing us to package for all major distros in one place. Can even make changes through web interface!

Build system uses nonexistent python 3.3 headers

On Debian testing (with python3.3 and 3.4 interpereters installed, but only python3.4 headers), the build system attempts to use 3.3 headers that do not exist. Inspection of the CMake cache suggests it's attempting to use the 3.3 interpreter with the 3.4 headers; PYTHON_EXECUTABLE is /usr/bin/python3.3, while PYTHON_INCLUDE_DIR is /usr/include/python3.4m. The compiler is finally invoked with -I /usr/include/python3.3m, however.

preprocessor-free coordinate system

The preprocessor hackery has to be replaced by the new openage.codegen python generation.

This should create the necessary headers and should end the pain of the current C preprocessing implementation.

The implementation is located in libopenage/coord.

Rendering of buildings broken under r300g/Mobility FireGL V5250 (poor driver/hardware support?)

Buildings simply do not render under r300g (on a Mobility FireGL V5250, like Radeon X1700) : http://plantmonster.net/~oldlaptop/images/openage-blackbuilding.png

The following fragment of console log seems relevant:

r300 FP: Compiler Error:
../../../../../../src/gallium/drivers/r300/compiler/r500_fragprog_emit.c::emit_paired():  emit_alu: Too many instructions
Using a dummy shader instead.

Whether this can or should be fixed on openage's end, I don't know. Perhaps it's even a hardware limitation.

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Invoke conversion script from the game binary

The openage.convert script should be invoked by the game.

The game launches its own Python interpreter to perform the conversion.
The input path could be queried interactively someday,
the output path equals the userassets directory which will be ~/.openage/ later.

  • Create openage --convert invokation
  • Load python interpreter in the game (cpp/python.cpp)
  • Modify sys.path
  • AGE2DIR equals the argument to --convert
  • Invoke openage.convert.__main__.main()

Version detection for original media files

The convert script should detect the present version of the original game and provide the matching file actions. This allows us to support different patch levels as 1.0c and better AOE:HD support.

@zuntrax started implementing the ideas which need to be adapted to the new codebase.

Loading screen

The asset loading may take some time, especially it's currently dumb and just loads everything instead of accessing on demand.

There should be some "progress bar", "spinner" or at least on-screen hint that assets are being loaded. Probably related to #70, a black screen is likely to be seen when waiting for the asset loading.

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Building on OSX 10.10

Just tried to build on Mac OS X 10.10 and always getting this:

CMake Error at /usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
Could NOT find PythonLibs: Found unsuitable version "2.7.6", but required
is at least "3.3" (found
/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib)
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:341 (_FPHSA_FAILURE_MESSAGE)
/usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPythonLibs.cmake:276 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
cpp/CMakeLists.txt:74 (find_package)

The cmake from brew (3.0.2) didn't work. I've installed 3.0.0 from https://raw.githubusercontent.com/NikolausDemmel/homebrew-devel/master/cmake.rb (with some sha1 manipulation), still no results.

Will be thankful for any support, and will be glad to help with Mac testings.

3D messages ingame

We need support for displaying any text in the game.

This allows us to e.g. display debug messages for current coordinates of objects which would otherwise spam the console.

The first step would be creating a new logging function, which gets the display coordinates as first input.

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

New logger subsystem

We need a better logging system.

Filtering messages, verbosity levels, origin tracking, backtraces, ...

Screenshot storage and numbering

Currently, each screenshot is put to /tmp/openage_00.png.
This should be updated to ~/.openage/screenshots/openage_xxxx.png, where xxxx is incremented automatically (start counting at 0!).

For debugging purposes, the game version described in #27 should be included on the screenshots when it's not disabled by the user.

Terrain generation and Random Map Scripting (RMS)

openage needs random map generation.

For that we probably need two approaches:

  • Random map scripts
    • Be creative and implement configurable map generation in Python
    • On top of that, we can implement a RMS script parser that then is mapped to the Python API
  • As extension, deterministic infinite terrain generation, comparable to Minecraft, for unlimited map sizes.

The important part is the configurable RMS generator.

  • Input: some configuration
  • Output:
    • Terrain grid (with heights and tile type)
    • List of entities with their positions (trees, animals, resources)

Can not flattr

Hi,

when trying to flattr this really nice project via the button in the readme I get:

Sorry, content not supported
Unfortunately we can't support flattring this content. We couldn't find an owner for it and thus can't flattr it - sorry for that.

If you think we should've been able to find an owner, then contact our support. If you want to find something else to flattr, then visit our catalog.

Maybe a problem with the button, maybe something temporary - just wanted to let you know :)

Best regards
Niklas

Possibly change old tags and/or at least use semantic versioning going forward

Seems a bit silly to have a 1.0 and 2.0, 2.1, 2.2 releases before the game is even playable. Perhaps reroll tags as 0.1, 0.2, 0.3, ... Unless there is something depending on them. Obviously, the best to change tags, but it just seems strange to start first usable release on 3.x or even higher.

Also got the high version number feedback when submitting to distro official games repository as well.

Either way http://semver.org/ seems like the generally good practice going forward.

Battlefield style battlescreen

Basically a large second screen minimap with more detail. Perhaps showing unit icons instead of just colored pixels.

The Battlefield version is done using a web interface (not sure if connected to local game or central server). For openage it could be done in any variety of options.

I bring this up since I've been doing some basic research into this before I discovered openage. My plan was to either intercept network traffic (like voobly does for observer proxy) or read the record game file as it is being written (assuming it dumps fairly often).

There is some code out there to parse the starting point of recorded games and stats and what not, which voobly uses on their site, but not a lot of info on the meat of the file. Does openage support recorded game files? As such I imagine I could look there.

I would be interested in creating this if it sounds feasible, although my plan was do it as a local webservice. If there is information on recorded game format perhaps it would be better to create it standalone so it works for AoC, HD, and openage. Thoughts?

Stuttering sound

What I Do And What I Get:

  • Scroll until getting to the trebuchet (the "car" one)
  • Right click the map once
  • Hear stuttering "U-U-U-U-U-U-U-E-E-E-E-E!"
  • Start smashing right click so the trebuchet appears-dissapears-...
  • Hear 'UUUE!" without stuttering a few times (they don't go in parallel)
  • Hear a last stuttering u-u-u-u-e-e

I'd like to test the in_memory sound instead of the dynamic... but just changing this

                gamedata::audio_loader_policy_t::DYNAMIC

to this:

                gamedata::audio_loader_policy_t::IN_MEMORY

on game_main.cpp:205 doesn't work at all (no sound).

Can anyone reproduce? 🔉 🔊

Expand --data argument to allow for ~/ and such

As per #81, the .desktop file would like to use the following command

openage --data="~/.openage/assets"

It appears that openage does not expand that and looks for literally ~/.openage/assets. Would be great to see it expand the argument.

FONTCONFIG_LIBS configuration missing (Fedora)

I got an issue trying to install it on fedora. I replace each debian package described in the installation instructions to the packages found in fedora repository (which the command would be sudo yum install cmake python3-devel SDL2-devel ftgl-devel SDL2_image-devel opus-tools glew-devel freeglut-devel libpng-devel freetype-devel opusfile-devel mingw32-fontconfig, after it is working we can even add in the documentation). The problem is with the FONTCONFIG_LIBS variable (the output message claims, the whole output is here), which I think it would need to be defined but I don't know to where exactly, any guess? Thank you guys in advance

aoe:hd support [$10 awarded]

Support converting aoe:hd assets.
-- creating issue to track progress as suggested by TheJJ in irc. --

Also perhaps #1 is not as much of an issue since it allows those that own HD copy (much easier to get ahold of) to play on openage.

The $10 bounty on this issue has been claimed at Bountysource.

Sometimes the game hangs loading with a black screen

The log reads this:

DBG0  inserting new chunk at (00,00)
DBG0  neighbor 0 not found.
DBG0  neighbor 1 not found.
DBG0  neighbor 2 not found.
DBG0  neighbor 3 not found.
DBG0  neighbor 4 not found.
DBG0  neighbor 5 not found.
DBG0  neighbor 6 not found.
DBG0  neighbor 7 not found. 

It usually happens to me on a cold boot. It fixes by itself, I don't know what's the cause. When it fixes for the first time, it keeps working afterwards.

I'm on Arch Linux x86_64, currently running GNOME3.

00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)

Setup CD conversion support

Very related to the conversion targets (#79) and the version detection (#61) is the support of converting media and game files from setup disk images. The Python module openage.cabextract provides cab extraction features needed by the .cab files on the disc.

  1. Pass mount point of the original CD (or ISO image)
  2. Detect version of the disk image
  3. Use fslike abstraction to mount all archives on disk.
  4. Convert contents of mounted archives.

The invocation should originate from openage/convert/driver.py.

Building foundation offset

The hotspot of buildings sprites may be offset. The placement algorithm probably needs to be fixed, the calculation is done in the terrain_object class. This algorithm needs to be improved, the hotspot is not correctly aligned with the terrain grid.

Error example:
openage

Render manager

The rendermanager is some kind of batching mechanism to optimize the opengl calls.
This mainly means to reduce the amount of texture and shader switches for now.

Everything that should be rendered is submitted to the render manager. It orders the jobs and finally draws them in the optimized, but correct order.

The remaining features are tracked in the TODO-list below.

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.