Free Heroes of Might and Magic II (fheroes2) is a recreation of HoMM2 game engine.

Overview

fheroes2

Free Heroes of Might and Magic II (fheroes2) is a recreation of HoMM2 game engine.

This open source multiplatform project, written from scratch, is designed to reproduce the original game with significant improvements in the gameplay, graphics and logic (including support for high-resolution graphics, improved AI, numerous fixes and UI improvements), breathing new life into one of the most addictive turn-based strategies.

Download and install

To download and install fheroes2 please follow the installation guide.

Github Downloads

Copyright

All rights for the original game and its resources belong to former The 3DO Company. These rights were transferred to Ubisoft. We do not encourage and do not support any form of illegal usage of the original game. We strongly advise to purchase the original game on GOG or Ubisoft Store platforms. Alternatively, you can download a free demo version of the game. Please refer to the installation guide for more information.

License

This project is licensed under the GNU General Public License v2.0.

Initially, the project was developed on sourceforge.

Contribution and Development

This repository is the place for everyone. If you want to contribute, please read more here.

To build the project from source please follow this guide.

Build status Build Status Bugs Code Smells Duplicated Lines (%) Total alerts

Donation

We accept donations via Patreon or PayPal. All donations will be used only for the future project development as we do not consider this project as a source of income by any means.

Donate Donate

Contacts

Follow us on social networks: Facebook or VK. We also have a Discord channel to discuss the development of the project.

Discord Facebook VK

FAQ

You can find answers to the most common questions on our F.A.Q. page.

Comments
  • Build SDL_Mixer with FluidSynth on Windows

    Build SDL_Mixer with FluidSynth on Windows

    fix #237 fix #2009 fix #2901 fix #5528 fix #5569 fix #5622

    Related to #5047 - it fixes the resumption of MIDI music (at least on Windows).

    Current issues:

    1. ~If music type is changed during the game at least once from MIDI to external (or vice versa), then the game waits for something on exit. Maybe this could be cured by using the latest SDL_Mixer or latest FluidSynth (both are not latest in the vcpkg port database), but maybe (although doubtful) it is somehow related to our code~ FIXED by building the app with the latest SDL_mixer (2.6.1);
    2. ~Build times are HUGE, because we need to build libs by hand. I added the cache, but sometimes (when the cache is not used) build may take more than 1 hour~ FIXED by installing vcpkg tree from fork. This fork should be updated only episodically - when the new version of some library is released and we want to use it. In this circumstances the cache helps well - package installation takes just a few dozens of seconds;
    3. MIDI sounds a bit different, but we can try different sound fonts (~BTW sound fonts are also HUGE - dozens or even hundreds of megabytes~ FIXED by adding support for SF3 (compressed) SoundFont format);
    4. ~This will work only with SDL2. I even temporarily removed the Windows build with SDL1 because MSVC project structure was changed slightly and adaptation of scripts for SDL1 is still to be done~ FIXED: script adaptation is performed.
    bug improvement Windows deployment audio high priority GitHub Actions 
    opened by oleg-derevenetz 152
  • German translation

    German translation

    Here's a German translation I wish to contribute, and I'd like to ask everyone to invite German-speaking reviewers they might know. My German is pretty basic, so I just machine-translated most of the phrases, trying to fix them the best I could, especially regarding game terminology and the use of pronouns.

    As with French, I tried to stick to GoG version terminology for:

    • world map locations
    • artifacts
    • monsters
    • spells
    • resources

    German has the same "polite you" feature as French, so:

    • the game addresses the player with polite "you"
    • the player's subjects in the game use polite "you"
    • the enemies and unfriendly event characters use regular "you"

    Now, I suppose my work is filled with all kinds of mistakes. I'd like to ask reviewers to concentrate on recurring issues in the first place, such as:

    • wrong verb tense being used in certain phrase types
    • wrong choice of recurring words, such as creature/monster/unit, view/show, allow/enable, etc

    I'm not trying to sneak poor work in, I just want to say that fixing every single typo in this PR is going to take a very long time, so it would be more efficient to accept a translation with a bunch of mistakes, and then make additional PRs fixing them: that would allow several people to work in parallel, without the need to merge 3000+ lines.

    improvement translation 
    opened by dimag0g 56
  • Extra sounds while playing MIDI music on Xubuntu 20.04

    Extra sounds while playing MIDI music on Xubuntu 20.04

    Your question

    When I start the game, I hear two tunes, one on top of the other - the usual background midi music and some awful pipes on top. Is it possible to turn off these nightmarish pipes? Thank you.

    Additional info

    No response

    bug Linux audio awaiting feedback 
    opened by lua-rocks 52
  • Refine battle pathfinding using a recursive greedy depth-limited approach

    Refine battle pathfinding using a recursive greedy depth-limited approach

    Hi all,

    I don't know if it's really worth it (considering the new (Dijkstra's based?) pathfinding engine from battle_pathfinding.cpp), but here is my proposal of greedy (in the sense of making the locally optimal choice at each stage) recursive pathfinding algorithm as a possible temporary replacement for old GetAStarPath(). This algorithm may be suboptimal in some situations, but it is simple and (at first sight) it shows much better results than old (in my opinion, weird or incorrectly implemented A* based) pathfinding algorithm, especially in the case of wide units.

    Anyway, there is definitely one useful commit in this PR that fixes Board::GetDistance() function. Previous implementation gave incorrect results in a number of cases.

    fix #2951

    improvement logic 
    opened by oleg-derevenetz 51
  • Extended spell/monster info

    Extended spell/monster info

    I don't know if it's by design, but comparing to HoMM 3 there's no extended unit info in troop info dialog. For example, Mummies curse, Liches do attack with death cloud, Griffons always retaliate and so on. For example, this function: https://github.com/ihhub/fheroes2/blob/master/src/fheroes2/dialog/dialog_armyinfo.cpp#L255 can be extended to output all such info and it can made as configurable option (I can make a PR). The real question in this case is, what is the single source of truth for monsters data? XML files seem pretty outdated.

    Same goes for spells – there's no information of damage inflicted, which makes it pretty hard to use...

    improvement question ui 
    opened by lyssdod 50
  • Cursor management cleanup

    Cursor management cleanup

    Cleanup cursor management (mostly, there are still some places that count on the cursor visibility as a redraw indicator). As a continuation of #3402.

    improvement ui 
    opened by oleg-derevenetz 49
  • Game settings window, opinion and suggestions regarding the options

    Game settings window, opinion and suggestions regarding the options

    I did a little study of the different options available in the "Game Settings" window. Here is my opinion and suggestions regarding these options.

    Mandatory by default:

    • game: autosave on Currently this option is enabled by default.

    • world: use unique artifacts for secondary skills Currently this option is not enabled by default. This option affects artifacts related to the secondary skills Scouting, Mysticism and Necromancy. In the original game, if the hero has multiple copies of one of these artifacts, the bonus is only counted once (hero's vision area, etc.). Scouting --Telescope: +1 square to hero's viewing range. Mysticism --Power Ring: +2 additional spell points restored to the hero (a total of 3 spell points restored with the spell point restored by the hero at the start of each turn). Necromancy --Spade of Necromancy: +10% of Skeletons generated at the end of a combat. When this option is not activated, all the bonuses of artifacts related to these three secondary skills are counted multiple times. This is a very interesting option but it should be possible to set it separately for each secondary skill to allow precise tuning according to the user's wishes (separate settings for Scouting, Mysticism and Necromancy). (https://github.com/ihhub/fheroes2/issues/2336)

    • heroes: remember move points for retreat/surrender result Currently this option is not enabled by default. In the original game, the hero recovers all of his movement points when the hero is recruited. I consider this to be a bug. In fheroes2, it is possible to use this option to remedie this.

    Must have:

    • game: remember last focus This option makes the last hero/castle selected when the player ends his turn automatically be selected in the next turn.

    • battle: show damage info This option can be improved, I already have some ideas. (https://github.com/ihhub/fheroes2/issues/1624) Edit: Should be integrated into the program with the possibility to be activated/deactivated with the keyboard key "F5".

    • world: show visited content from objects Currently this option is enabled by default. It may be desirable to leave this option enabled by default, even if it does not match how the original game works, as it is a very nice game improvement. This option also acts, in a hidden way, on the display of the terrain penalty in the information window in the squares adjacent to the hero. This feature should have a separate setting (https://github.com/ihhub/fheroes2/issues/2575).

    • world: Wind/Water Mills and Magic Garden can be captured I really like this option, because it removes unnecessary and tedious micromanagement from the game.

    • world: scouting skill show extended content info This option needs to be improved, and I already have a more complete idea for it. (https://github.com/ihhub/fheroes2/issues/1506)

    • world: Eagle Eye also works like Scholar in H3. Related to Heroes 3. This option needs to be improved and there are some bugs. I planned a tweak for the Eagle Eye skill and I have a skill suggestion (Learning) that does much the same thing. (https://github.com/ihhub/fheroes2/discussions/2990)

    • world: ban plagues months This option can prevent "unintentional" reloads of the game.

    • heroes: allow buy a spellbook from Shrines This option is very nice, but the price of the book in the shrines is too high for my liking. Edit: A cost of 500 Gold in all Shrines as in a Mage Guild is high enough (instead of a different price in each type of Shrine). (https://github.com/ihhub/fheroes2/discussions/3384)

    • heroes: in Arena can choose any of primary skills This option is very interesting, I wonder why it is not automatically integrated into the original game. The power of knowledge should not be underestimated, and in addition the graphic is already present in the game files. This option is related to "The Price of Loyalty" expansion. Folders and files from the expansion are necessary.

    Useful:

    • game: always confirm for rewrite savefile

    • game: show info system Displays the time and the number of frames per second. Edit: Could be integrated into the program with the possibility of being activated/deactivated with a keyboard key.

    • game: autosave will be made at the beginning of the day This option can be useful to avoid having to wait for AI players turn.

    • game: offer to continue the game afer victory condition I know someone interested in this option.

    • world: allow set guardian to objects Related to Heroes 3. This option can be improved.

    • world: ban for WeekOf/MonthOf Monsters

    • world: Months Of Monsters do not place creatures on map

    • battle: show army order This option can be interesting, especially for new players. Edit: Should be integrated into the program with the possibility to be activated/deactivated with the keyboard key "F6".

    • world: Neutral armies scale with game difficulty (https://github.com/ihhub/fheroes2/pull/1872) If you enable the option army counts are simply multiplied by: Normal - 100% Hard - 130% Expert - 160% Impossible - 190%

    • world: show terrain penalty This option displays the terrain penalty according to the selected hero taking into account the hero's secondary skill Pathfinding.

    • castle: allow gardians This option can be interesting. I haven't tested it extensively. This option needs to be improved.

    Bugged:

    • game: use fade This option is bugged. The effects should be integrated the same as in the original game and this option should be removed.

    Related to Heroes 3:

    • unions: allow meeting heroes This option can be interesting. Edit: This option is bugged, see post below.

    • unions: allow castle visiting This option can be interesting. This option crashes the game when a hero visits an ally's castle in two-human multiplayer mode. Edit: This option is bugged, see post below.

    • battle: soft wait troop

    • battle: reverse wait order (fast, average, slow) This option can only work if the "battle: soft wait troop" option is activated, however activating the "battle: reverse wait order (fast, average, slow)" option does not automatically activate the "battle: soft wait troop" option. Edit: Could be integrated into the program with the possibility of being activated/deactivated with a keyboard key.

    These options will not be necessary in the future: These options are intended to bring difficulty to the player. I doubt they will be used by the majority of players. Also, since the AI will be improved and there will be a very difficult mode, they are not really necessary anymore.

    • world: Starting heroes as Loss Conditions for Human Players This option can be frustrating, but useful for players who want a challenge.

    • world: Only 1 hero can be hired by the one player every week This option can be frustrating, but useful for players who want a challenge.

    • world: each castle allows one hero to be recruited every week This option can be frustrating, but useful for players who want a challenge.

    • world: use unique artifacts for resource affecting This option does not currently work. (https://github.com/ihhub/fheroes2/issues/2337) This option can be frustrating, but useful for players who want a challenge.

    • heroes: recruit cost to be dependent on hero level This option can be frustrating, but useful for players who want a challenge.

    • castle: higher mage guilds regenerate more spell points/turn (20/40/60/80/100%) This option can be frustrating, but useful for players who want a challenge.

    These options should be adapted:

    • world: use unique artifacts for primary skills This option can be frustrating, but useful for players who want a challenge. Currently, this option also affects artifacts related to movement on land and ocean and it is not possible to make fheroes2 work the same as the original game because of this. This option affects artifacts related to the primary skills Attack, Defense, Spell Power and Knowledge. When this option is activated, all the bonuses of artifacts related to these four primary skills are counted only once. This is not the way the original game works where all bonuses from artifacts are counted. This option also affects artifacts related to the secondary skills "Logistics" (movement on land) and Navigation. "Logistics" (movement on land) -- Nomad Boots of Mobility: +6 Moves (600 points). -- True Compass of Mobility: +5 Moves (500 points) on land and ocean. -- Traveller's Boots of Mobility: +3 Moves (300 points). Navigation -- Sailor's Astrolabe of Mobility: +10 Moves (1000 points) on ocean. -- True Compass of Mobility: +5 Moves (500 points) on land and ocean. When this option is not activated, the bonuses of artifacts related to these two secondary skills are counted several times. This is not the way the original game works where bonuses from these artifacts are counted only once. As you can see, currently it is not possible to make fheroes2 work the same as the original game. If the option is not enabled, the bonuses of movement artifacts on the land and on the ocean are counted multiple times, which is not the case in the original game. And if the option is enabled to remedy this problem, the bonuses of artifacts related to the four primary skills are only taken into account once, which is not the case in the original game. I suggest moving the setting for the secondary skills "Logistics" and Navigation in the option "world: use unique artifacts for secondary skills" (with separate setting for Logistics/Navigation as proposed). (https://github.com/ihhub/fheroes2/issues/2335)

    • world: use unique artifacts for moral/luck (currently not available) Currently this option is not enabled by default. In the original game, if the hero has multiple copies of the same artifact, the bonus is counted only once. And in fheroes2, when this option is not activated, the info window does not give correct information when the hero has several copies of the same artifact, examples "Medals of Valor +2", "Fizbins of Misfortune -4". (https://github.com/ihhub/fheroes2/issues/1300) The possibility to cumulate the effects of multiple copies of the same Morale and Luck artifact is a good option in my opinion because it reduces micromanagement between heroes and reduces the frustration of having artifacts taking up space for nothing.

    Related to "The Price of Loyalty" expansion. Folders and files from the expansion are necessary.

    • world: Crystal Ball also added Identify Hero and Visions spells Edit: With this option enabled, the "Identify Hero" and "Visions" spells are available in the hero's Magic Book as long as the Crystal Ball artifact is present in the hero's inventory. The description of this option can be confusing and should be replaced: "world: Crystal Ball temporarily inscribes the "Identify Hero" and "Visions" spells in the hero's magic book" It can be an interesting option for the game.

    • world: disable Barrow Mounds I have a very interesting idea for ghosts.

    • heroes: allow transcribing scrolls (needs: Eye Eagle skill) This option has the effect of permanently inscribing the temporary spell of a spell scroll in the hero's magic book. This is a very nice option. Edit: Adjustment for the option: https://github.com/ihhub/fheroes2/issues/2466.

    There are spelling mistakes and presentation irregularities in this window, it would be nice that a native english speaker checks this window.

    I will report the bugs mentioned in this post later.

    I will suggest other options to improve the gameplay and make the game more user friendly.

    Edit 2020/12/25.

    Managing options and user preferences with a better GUI: https://github.com/ihhub/fheroes2/discussions/2472.

    improvement question 
    opened by LeHerosInconnu 44
  • Scroll with mouse key on gamearea

    Scroll with mouse key on gamearea

    With this you can move the section on the gamearea with the right mouse button.

    Facilitates the operation on the Steam Deck immensely.

    Unfortunately, I'm not that much of a C++ expert at the moment and my knowledge of the codebase is also limited.

    Done ~~Could still need some support here for:~~

    • ~~Clean integration (not so hacky)~~
    • ~~Faster refresh when scrolling, currently it's a bit laggy~~
    • ~~quickinfos outside the gamearea should not hide the menu after moving the mouse while pressing the right mouse button~~
    • ~~ignore scrolling at the edge of the screen while pressing the right mouse button~~
    improvement ui 
    opened by Laserlicht 43
  • Add initial build for Android Studio

    Add initial build for Android Studio

    This is a very basic setup of Android Studio build with many unsolved issues such as:

    • release build requires signing
    • the path in internal storage is org.libsdl.app
    • source code of SDL2 and SDL2 mixer must be put under android/app/jni directory
    • source code of fheroes2 directory subfolders must be put under android/app/jni/src (we shouldn't do this but for POC it is that this way)
    • settings for the application are not set
    • midi music does not work and etc and etc

    However, you can build a debug version and run it on an Android device. I do not have one so I tested on an emulator using Android Studio on Windows.

    All comments and recommendations are welcome as I have limited knowledge in Android development but we need to make such step to move forward.

    Thing to be done in this PR:

    • [x] fix SonarQube analysis
    • [x] fix path for compilation of fheroes2 source code
    improvement script Android 
    opened by ihhub 41
  • Luck/Morale effects happen randomly in battle on each re-load.

    Luck/Morale effects happen randomly in battle on each re-load.

    Preliminary checks

    Platform

    Windows

    Describe the bug

    Steps:

    1. Start a battle by hero with some luck/morale bonus (save the game before battle).
    2. Make some moves to make luck/morale effect happened. For example, hero's gargoyles received additional move cause of morale bonus. Then, next hero's unit - centaurs - did not receive it.
    3. Quit battle, load saved game.

    Result:

    • In original Heroes 2 this sequence of events will happen on every re-load (gargoyles received morale effect, centaurs not). Game could be re-loaded million times - you will receive exactly the same sequence (if your moves were the same too).
    • On fheroes2 sequence is random. For example, on first re-load gargoyles will receive morale effect, on second re-load - centaurs will, on third - nobody (or both), etc..

    It is very important to support original behavior.

    Save file

    Experienced this issue in almost every battle.

    Additional info

    fheroes 0.9.6, Win10, GOG dosbox

    improvement logic 
    opened by ivanychag 40
  • Rework of experimental options

    Rework of experimental options

    Preliminary checks

    Describe the problem requiring a solution

    Since there are always ongoing debates about whether to keep or remove certain experimental options we need to make a clear way how to deal with them.

    Describe the possible solution

    I suggest to do these steps:

    • [ ] add a configuration option to enable and disable all experimental options in the game. With the disabled state there is no way to change them or even load them with save files (controversial)
    • [ ] save them in a separate file format which supports extension in the future
    • [ ] handle issues with options being loaded from save files which update global state of these options within the game
    • [ ] add a clear indicator that the game is being played with these options being enabled (an icon perhaps on the Adventure Map)
    • [ ] propose a new dialog for these options to keep the same style of the game. Each option should follow the guide from the wiki page. We might stick to one set of sprites to turning on or off. Alternatively, we can use checkboxes but popup windows with a full description must be present. The page must contain a message telling that these options change the core gameplay and can lead to unexpected consequences.
    • [ ] add an indicator that a save file contains enabled experimental options
    • [ ] add an indicator that a high score was achieved with the enabled options
    • [ ] add a question dialog for users which do not have these options enabled (global configuration flag) while they are loading a save file with the options
    • [ ] add a way to show the options for campaign scenarios
    • [ ] rename experimental options into something more game-style friendly

    Additional info

    No response

    improvement ui logic 
    opened by ihhub 39
  • Changelog in appdata.xml

    Changelog in appdata.xml

    Script for parsing the changelog.txt into *.appdata.xml. Copies the whole changlog (except the oldest entry) in the appdata.xml.

    Appdata can be updated after changelog update by executing python3 script/tools/changelog_update_appdata.py changelog.txt script/packaging/common/fheroes2.appdata.xml.

    @ihhub Do you think that's a good idea, or should we rather discard it?

    Furthermore I have also added the donate link.

    Changelogs looks like this in the software center (sorry for german): grafik

    improvement script 
    opened by Laserlicht 4
  • [WIP] Integer display scale factor

    [WIP] Integer display scale factor

    Hi!

    As announced in #5016, here's a draft for supporting integer factor resource scaling. E.g., 1920x1080 can fit up to 3 OG screen by width, but only 2 by height, so the factor is 2 in this case. A resolution of 2560x1440 is 4x:3x of the OG's 640x480, so a useful scale factor is either 2 or 3 (for now the maximum is chosen automatically, but we may let user choose the factor freely as well). Higher resolutions with lower-than-maximum scale factors are likely the most useful combinations.

    The change is focused on the rendering engine and tries to avoid touching the application code as much as possible — the vast majority of pixel offsets are hard-coded values in the game code, obtained by measuring the original game's resources, which would be infeasible to touch. ;)

    The way this was made possible is by associating an integer "scale factor" value to each Image instance (including Display) and making the images "lie" about their dimensions: regardless of the scale factor, an image instance will always report the same width and height — its "logical dimensions". The actual physical dimensions are only used by the image manipulation and rendering routines, for the most part contained in a single file image.cpp.

    The resources are loaded with the default scale factor of 1 and on-demand can be resized and cached for higher scale factors (up to 4). Resizing is done using our existing nearest neighbour algorithm, but this is where other algorithms may be plugged in later, if desired.

    Once this is given, the next step is to always create Image instances with the display's current scale factor, and, because the display is also reporting its width/height in the logical units, the calculations like centering a box on the screen continue to work "magically".


    Edit: added example.

    Consider the code for rendering a window of arbitrary size in the middle of the screen: https://github.com/ihhub/fheroes2/blob/master/src/fheroes2/gui/ui_window.cpp#L33-L36

        StandardWindow::StandardWindow( const int32_t width, const int32_t height, Image & output )
            : _output( output )
            , _activeArea( ( output.width() - width ) / 2, ( output.height() - height ) / 2, width, height )
            , _windowArea( _activeArea.x - borderSize, _activeArea.y - borderSize, _activeArea.width + 2 * borderSize, _activeArea.height + 2 * borderSize )
    ...
    

    It takes the dimensions of the inner active area width×height and adds a border of the hard-coded size of 16 logical pixels around it in all directions. Let's work out the coordinates for rendering such a window border on the display at resolution 1920x1080 with scale factor 2, for an inner area of 640x480 logical pixels.

    As this is application code (not the rendering engine), my priority was to leave it untouched. The width() and height() methods used here return the logical dimensions, so for our display these values are 1920/2 = 960 and 1080/2 = 540. The width and height parameters may either be hard-coded in the caller, or they may come from measuring the dimensions of a game resource, such as result of calling fheroes2::AGG::GetICN( ICN::SWAPWIN, 0 ). In the original resources, this the window displayed when two heroes of the same player meet each other for exchange of armies and artifacts. It has the dimensions of 640x480 pixels. Because in this example our display's current scale factor is 2, the Image instance returned by the GetICN() function is pre-scaled 2×2, so its physical dimensions are actually 1280x960. The logical dimensions, visible to the application code, are the same regardless of the current scale factor.

    So the activeArea works out, in logical pixels, to { (960 - 640)/2 = 160, (540 - 480)/2 = 30, 640, 480 }. The broderSize is hard-coded as 16, so windowArea works out, again in logical pixels, to { 160 - 16 = 144, 30 - 16 = 14, 640 + 2*16 = 672, 480 + 2*16 = 512}.

    When the window border image is rendered on the display, the logical pixels are translated to physical ones, by simply multiplying them by the scale factor. This, again, happens in the rendering engine's functions such as Blit(), so the application code doesn't need any changes for rendering to work correctly. The border area becomes, in physical pixels: { 144*2 = 288, 14*2 = 28, 1344, 512*2 = 1024 }. The inner active window area — { 160*2 = 320, 30*2 = 60, 640*2 = 1280, 480*2 = 960 }.

    image


    Finally, for correct controller operation, the mouse position should be also tracked taking the current scale factor into account.

    The rendering code is always working with static pre-scaled resources (there is no real-time upscaling and it's not needed).

    As I've mentioned in the original discussion, I observe no performance impact of the adjusted rendering procedure. :mx_claus: :champagne:


    Edit: some notes on the implementation. It's not without hacks, some of which are quite ugly.

    This has mostly to do with the fact that Display::instance() is used as default parameter in a couple of places, such as default target for rendering buttons, etc. It would be better to add an abstraction layer of a "rendering context", so that direct rendering on the display is prohibited. That would also help to reduce code duplication where coordinates of the top-left corner are constantly need to be added manually to each X,Y screen offsets.

    Not directly related to this, I think it may make sense to eventually rework the UI controls system to properly encapsulate the state/rendering and event handling. Right now it's all over the place and is simply copied over from one dialog code to the other, with slight changes. I don't know what are you exact plans for the Editor, but it feels like this is where even more dialogs and controls will be introduced. ;)


    TODO:

    • [ ] Make changing resolutions / scale factor 100% safe (there are some corner cases right now)
    • [ ] Figure out the crash in the multi-language font generation
    • [ ] Check how it works (or doesn't) on non-default build targets
    • [ ] Explore advanced upscaling filters
    opened by a1exsh 0
  • Prepare code for the future Editor

    Prepare code for the future Editor

    This is a preparation step towards building the future Editor. Right now the code related to object loading and handling on Adventure Map is a complete mess. This pull request is targeted to cleanup the code and make it more or less readable. The list of changes:

    • rename uniq, level, object and index of TilesAddon structure and uniq, objectTileset, objectIndex and _level of class Tiles into _uid, _layerType, _objectType and _imageIndex to have the same member names as these variables are exactly the same for both classes. In the future class Tiles will have only one stack of objects.
    • add ObjectIcnType enumeration and replace many hardcoded values by entries from the enumeration
    • add multiple TODO comments for the future changes (I wanted to keep this pull request as small as possible)

    This pull request touches the underlying logic for Adventure Map objects. While it does not change the logic at all there is a chance that these changes might break anything for loaded from save files maps or new maps. I tested multiple maps and everything look correct.

    relates to #4330 and #6415

    improvement logic 
    opened by ihhub 2
  • Music crackling/popping

    Music crackling/popping

    Preliminary checks

    Platform

    Windows

    Describe the bug

    Most of the music in this version of the game has a very noticeable crackle, which can be noticed only few seconds into the main menu music for example, but happens during all the music in game I heard so far.

    Of course I've tried first if the issue is on my side, but was not able to resolve it: My audio drivers are up to date. I have no audio enhancements on my audio device enabled. My format is set to 48000Hz 24Bits and I've tried almost every possible setting too (reducing channels to 16Bits, changing sample rate to 44100Hz or even 96000Hz).

    However, switching from my headphones to my speakers, I didn't hear any crackle, so it is most likely on my side. I am still putting this here in case of a suggestion and also because the same music does not have crackle in the other versions of the game (GOG version for DOS/Windows are both fine), so it still possibly has something to do with the way the playback works in this project.

    Save file

    Save file not required to reproduce the issue.

    Additional info

    Playing the track (homm2_41.ogg) itself via a media player in Windows, I do not hear the crackle either, even with volume set to much higher than in game.

    bug audio 
    opened by Novicek 6
  • Android: add the basic toolset activity with functionality that allows to unpack the files of the original game to the fheroes2 external data directory

    Android: add the basic toolset activity with functionality that allows to unpack the files of the original game to the fheroes2 external data directory

    As well as download & extract the demo version of the original game.

    Related to #6008 Close #6404

    I'm not a very talented UI designer, so...

    Screenshot_20221231-102608

    Sort of "Quadratisch. Praktisch. Gut.", but it does its job. This also should resolve an issue with modern Android devices (AFAIK Android 13 suffers from it) when user just doesn't have an access to the sdcard/Android/data/org.fheroes2 to copy game data files to it.

    Plus fixed minor regression after #6382 - default fullscreen on Android was actually toggled only on the second launch, not on the first one.

    improvement Android 
    opened by oleg-derevenetz 31
Releases(1.0.0)
Owner
Ihar Hubchyk
Computer vision researcher and developer
Ihar Hubchyk
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2.2k Jan 1, 2023
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 48 Dec 29, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 61 Dec 14, 2022
Free, open-source, game engine and a 3D sandbox.

Work-in-Progress The official "early alpha" release should be available around April 2021 SGEEngine SGEEngine is an open source (MIT License), C++ cen

ongamex 72 Dec 7, 2022
Free, cross-platform 2D game engine powered by Haxe and OpenFL

flixel | addons | ui | demos | tools | templates | docs | haxeflixel.com Links Here are the most important links to get you started with HaxeFlixel: G

HaxeFlixel 1.7k Dec 30, 2022
Amazon Lumberyard is a free AAA game engine deeply integrated with AWS and Twitch – with full source.

Amazon Lumberyard Amazon Lumberyard is a free, AAA game engine that gives you the tools you need to create high quality games. Deeply integrated with

Amazon Web Services 1.9k Dec 26, 2022
SameBoy DX is a Qt-based interface of SameBoy, a free, highly accurate Game Boy and Game Boy Color emulator.

SameBoy DX SameBoy DX is a Qt-based interface of SameBoy, a free, highly accurate Game Boy and Game Boy Color emulator. Build requirements: CMake Pyth

Snowy 7 Oct 2, 2022
A powerful free cross-platform RTS game engine

Spring RTS game engine README Spring (formerly TASpring) is an Open Source Real Time Strategy game engine. Visit our project homepage for help, sugges

Spring RTS 2.9k Dec 28, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

null 2.8k Dec 29, 2022
Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine 2D and 3D cross-platform game engine Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unifie

Godot Engine 56.7k Jan 9, 2023
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 8.3k Dec 29, 2022
Flax Engine – multi-platform 3D game engine

Flax Engine – multi-platform 3D game engine

Flax Engine 3.7k Jan 7, 2023
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 13 Dec 14, 2022
Rogy-Engine- - My 3D game engine source code.

Rogy-Engine Development My 3D game engine. (NOT THE FINAL VERSION- Windows only) Features: PBR shading and reflection probes with parallax correction.

AlaX 97 Dec 28, 2022
Hyperion Engine is a 3D game engine written in C++

Hyperion Engine About Hyperion Engine is a 3D game engine written in C++. We aim to make Hyperion be easy to understand and use, while still enabling

null 293 Jan 1, 2023
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 80 Nov 25, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 321 Jan 4, 2023
Niagara UI Renderer | Free Plugin for Unreal Engine 4

Niagara UI Renderer | Free Plugin for Unreal Engine 4 Niagara UI Plugin adds Niagara Particle System Widget that allows you to render Niagara particle

null 156 Dec 19, 2022
Free in the Dark, a Alone in the Dark engine reimplementation.

FITD Free in the Dark, a Alone in the Dark engine reimplementation. Long overdue source code update from the version that was released on source forge

null 47 Dec 20, 2022