summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2024-03-07Fixed ambient layers "keepratio" optionThorbjørn Lindeijer5-15/+27
I had broken this in 264be2108c51837fa92085f6c839e66aebbcfc9e by no longer reading out the property. Made some further simplifications and two more fixes: * When the original image's size was not 800x600, it wouldn't get scaled as expected due to the integer division being performed before the multiplication. * I had changed the default resolution to 1280x720, while mKeepRatio expects to scale the original image as if it was displayed on an 800x600 screen. So now it's hardcoded on 800x600 rather than using the defaultScreenWidth/Height variables. * Removed the confusing x/y parameters from AmbientLayer::draw, which were actually set to the graphics width/height. * Changed SDLGraphics::drawRescaledImagePattern to not repeatedly set the source origin.
2024-03-07Use the native TMX tile animation formatThorbjørn Lindeijer17-288/+247
Rewrote the tile animation loading code based on XML tags, replacing the code that loaded tile animations from tile properties. Also made a number of code simplifications and optimizations: * Replaced a number of pointer members with value members. * Pass around Animation and TileAnimation by value, using std::move to avoid allocating copies. * push -> emplace * push_front -> emplace_front * push_back -> emplace_back * Use range-based for loops * Use std::vector instead of std::list for storing affected tiles (less fragmentation) * Avoid string copies and allocations while parsing CSV layer data. * Replaced xmlNodeGetContent with directly accessing 'content'.
2024-03-07Fixed tile animations for CSV mapsThorbjørn Lindeijer2-6/+5
The affected tiles were only tracked for base64-encoded layer data.
2024-03-06General code cleanupsThorbjørn Lindeijer65-231/+136
* Use final for all message handlers, Client, LocalPlayer, Being::getType, Being::setPosition and Being::setMap. (avoids some warnings about virtual dispatch in constructors) * Use auto in more places * Use emplace_back instead of push_back in some places * Use default member initializers * Less else after return * Removed superfluous .c_str() * Removed type aliases that are only used once * Removed more unused includes
2024-03-04Fixed character displayThorbjørn Lindeijer22-107/+164
This change fixes hair style to take into account "race", which makes the faces visible again. Hair colors should also be fixed now, with partial support for itemcolors.xml added. The Mana client now also supports per-character gender, and it now hides the hair style and color buttons on character creation, when there are none to choose from. Closes #43
2024-03-04Added support for handling SMSG_NPC_COMMANDThorbjørn Lindeijer4-26/+94
This only adds support for the NPC_CLOSE_DIALOG and NPC_CLEAR_DIALOG sub-commands. Closes #47
2024-03-04Fixed duplication of player name in chatThorbjørn Lindeijer3-15/+39
* Fixed duplication of player name in chat Closes #49
2024-03-02Exit with error when invalid server type is passed on CLIThorbjørn Lindeijer3-11/+17
Also made it exit with error when there is an unknown option or missing argument.
2024-03-02Changed server type to "enum class"Thorbjørn Lindeijer24-98/+86
2024-03-02Added support for -y / --server-type parameterThorbjørn Lindeijer12-54/+68
Usually this would be guessed correctly by the port, but now it is also possible to just specify the server type and the port will be derived from there, unless a default port is given in the branding file. Closes #56
2024-03-02Added support for customizing NPC and Monster hover cursorThorbjørn Lindeijer9-48/+82
To match support for this in M+, since TMW uses this functionality on two of its NPCs.
2024-03-02Updated mouse cursors to latest versionThorbjørn Lindeijer7-70/+67
The new cursor types are not used yet for now.
2024-03-02General code cleanupsThorbjørn Lindeijer22-213/+122
* Don't needlessly store or return raw pointers in BeingInfo * Less copying, more moving * Less else after return * Make AddDEF a template instead of a macro * Removed some unused includes * Use range-based for loops
2024-02-29Re-download updates when their checksum no longer matchesThorbjørn Lindeijer4-49/+43
The Mana World currently likes to just update its "TMW.zip" file, whereas updates were always given unique names in the past. With this change, the client checks the Adler32 checksum to know when it should re-download an update file. This matches the behavior of ManaPlus commit 96150f1aeacf55d311c41ffe12d9e754b1cda001.
2024-02-28Use snprintf instead of sprintfThorbjørn Lindeijer1-5/+1
Using sprintf triggers a warning on macOS. The buffer should be large enough, but a little extra security doesn't hurt.
2024-02-27Added VSync and windowed fullscreen optionsThorbjørn Lindeijer20-784/+1068
The configuration and setup UI were adjusted to the new options. This also fixes issues in applying new video settings. Default resolution was changed from 800x600 to 1280x720. VSync is enabled by default while FPS limit was disabled. Display aspect ratio for the resolution options. I had to work around some macOS issues: * Don't change window size when it appears to be "maximized", since it just changes the rendering area while leaving the window maximized. * Unset fullscreen display mode temporarily to allow changing resolutions, otherwise the rendering area no longer matches the screen and mouse input is also off. * Removed SDL_WINDOW_ALLOW_HIGHDPI for now because it causes issues on macOS, since we're not actually handling the scaling factor. A Video class and an SDLGraphics subclass were split off from Graphics. This setup has Less duplication and leaves the OpenGLGraphics and SDLGraphics better separated. Fixes #57 Fixes #58
2024-02-22General code cleanupsThorbjørn Lindeijer75-362/+249
* Use default member initializers * Use range-based loops * Don't use 'else' after 'return' * Removed some unused includes * Construct empty strings with std::string() instead of "" * Clear strings with .clear() instead of assigning "" * Check whether strings are empty with .empty() instead of comparing to "" * Removed redundant initializations
2024-02-19Updated PhysicsFS API usageThorbjørn Lindeijer3-57/+24
Unfortunately, since we're making a difference between config and data, and also want to know where to write screenshots, we can't get rid of PHYSFS_getUserDir entirely. We'd need a replacement to get rid of the deprecation warnings. Also removed copying of old config file at "/.tmw/config.xml".
2024-02-19Fixed compile on macOSThorbjørn Lindeijer3-408/+15
Since Guichan is currently disabled on Homebrew, I've opted for adding it as a submodule instead. It currently references the 0.8 branch of Guichan, after I cherry-picked the CMake support from the master branch. When using SDL2 installed through Homebrew, it was necessary to use SDL2_LINK_LIBRARIES, since the libraries occupy various different directories. It no longer seems necessary to include an SDLMain.m, so I deleted it. Removed obsolete OS X instructions. Also added instructions for installing dependencies on Fedora. Removed mentioning of /announce and /who in the README, since they were removed for tmwAthena.
2024-02-15Fix handling of non-consecutive emote IDsThorbjørn Lindeijer15-170/+141
Previous code was assuming there would be no gaps in the emote IDs. Also cleaned up some confusion where the "emote ID" being passed around in the code was often offset by 1. Now it is only offset in communication with tmwAthena and when saving the shortcuts.
2024-02-14Avoid crash when receiving SMSG_MAP_MASK without Game instanceThorbjørn Lindeijer1-2/+3
It happened to me a few times. Needs checking whether we could instead make sure we always have a Game instance when receiving this message, because this way a map mask might get ignored. Or maybe the map mask just needs to be stored elsewhere.
2024-02-13Updated tmwAthena network protocolThorbjørn Lindeijer21-499/+471
* The code defining the message IDs and sizes are now generated by the tools/protocol.py script in the tmwAthena repository. * Reduced client version from 20 to 6, because that is currently the minimum supported version, and any adjustments needed for later likely still need to be made. * Removed use of no longer handled messages: - CMSG_SKILL_USE_BEING - CMSG_SKILL_USE_POSITION - CMSG_SKILL_USE_MAP - SMSG_PARTY_MOVE - CMSG_WHO_REQUEST - SMSG_WHO_ANSWER - SMSG_MVP - SMSG_BEING_MOVE2 - SMSG_BEING_CHANGE_LOOKS * Some messages were renamed to match the server side - CMSG_PLAYER_ATTACK -> CMSG_PLAYER_CHANGE_ACT - CMSG_PLAYER_RESTART -> CMSG_PLAYER_REBOOT - SMSG_ADMIN_IP -> SMSG_BEING_IP_RESPONSE Part of addressing issues #55 and #47, which we now know are about handling SMSG_PLAYER_HP and SMSG_NPC_COMMAND respectively. The client will now ignore them (with a warning) instead of crash.
2024-02-13Removed guild handling remnants for tmwAthenaThorbjørn Lindeijer1-373/+1
This stuff was removed from tmwAthena, so it will never be supported.
2024-02-13Removed no longer supported admin messagesThorbjørn Lindeijer8-158/+5
* Removed /announce command * Changed "Kick player" in player pop-up to kick by name Other messages, like CMSG_ADMIN_HIDE, CMSG_ADMIN_MUTE and CMSG_ADMIN_LOCAL_ANNOUNCE were already not used by the client. Also, none of this was implemented for Manaserv.
2024-02-13Reverted the PhysicsFS check for Ubuntu 18.04 compatibilityThorbjørn Lindeijer1-2/+2
Apparently, pkg-config files for physfs were not shipping yet in Ubuntu 18.04. Now it no longer checks that we have at least physfs 3.0, but older versions should be pretty rare anyway. This reverts part of ffa8ea13fbf50ad59d9fc4cea71b9aec4aca8bac.
2024-02-13Fixed music playbackThorbjørn Lindeijer2-21/+7
A faulty version check was disabling music loading entirely.
2024-02-13General code cleanupsThorbjørn Lindeijer94-663/+348
* Removing unused includes * Use member initialization * Use range-based for loops * Use nullptr * Removed no longer used aliases * Use override * Don't use else after return * Use '= delete' to remove implicit members * Use std::string::empty instead of comparing to ""
2024-02-09Optimized BrowserBoxThorbjørn Lindeijer9-351/+327
* Introduced a LayoutContext that conveniently allows for relayouting all rows, or just a single one when it is added. BrowserBox::addRow no longer relayouts all the rows. * BrowserLink and LinePart are now merged into a new TextRow struct, so they can be conveniently dropped when the row limit has been reached. * Removed "opaque" option, which was enabled by default but disabled for all BrowserBox instances. * Removed "always update" option, and instead start delaying relayouting automatically when there are a lot of rows (> 100 currently). * Update window now also has text wrapping enabled. Closes #50
2024-02-09Some cleanups in UpdaterWindow and BrowserBoxThorbjørn Lindeijer4-170/+79
Doing some cleanups before working towards optimizing this code. Removed needless additional wrapping code in BrowserBox::addRow, since the text will be relayouted anyway. Simplified layouting code a little. For example, there's no need to keep track of the number of wrapped lines. Use more optimal data structures, like an std::deque for the text rows and a plain std::vector for the line parts. Both have less fragmentation than an std::list.
2024-02-09C++11: Use default member initializersThorbjørn Lindeijer53-303/+174
This patch is not exhaustive.
2024-02-07Introduce .gitlab-ci.ymlThorbjørn Lindeijer1-2/+1
This just checks that the client compiles on Ubuntu for now. Also fixed a PhysicsFS linker issue introduced in ffa8ea13fbf50ad59d9fc4cea71b9aec4aca8bac...
2024-02-06Fixed crash when taking a screenshotThorbjørn Lindeijer1-1/+5
Wrong format was passed to SDL_RenderReadPixels. Issue introduced in 2c51c98625b225cecfb9628c30d62d4e30f7e3e1. Closes #52
2024-02-05Removed use of deprecated std::unary_functionThorbjørn Lindeijer1-9/+6
2024-02-05Updated C++ standard to C++17Thorbjørn Lindeijer3-14/+26
C++17 should be universal enough by now. This raises the minimum CMake to 3.8, which should also pose no problem since Ubuntu 18.04 already shipped with CMake 3.10. C++17's 'if' initialization statement is now used in an efficient implementation of 'join' for vector<string>, found on StackOverflow.
2024-02-05Use SDL2 to show a simple message box on errorThorbjørn Lindeijer4-55/+5
Replacing the various OS-specific ways implemented for macOS, Windows and Linux (based on xmessage).
2024-02-05Require PhysFS 3.0Thorbjørn Lindeijer1-21/+2
It seems the implementation of PhysicsFS RWops shipped requires a somewhat up-to-date PhysFS (beyond just a missing PHYSFS_DECL macro). Also simplified CMake files somewhat, enabling new behavior for some policies that were triggering warnings. And removed the no longer used FindSDL_gfx.cmake module (SDL_gfx is found using pkg-config since 2c51c98625b225cecfb9628c30d62d4e30f7e3e1).
2024-02-02Fixed use of deprecated CURLOPT_PROGRESSFUNCTION optionThorbjørn Lindeijer2-10/+13
Closes #51
2024-02-02Restored support for setting monster ID offset on monsters tagThorbjørn Lindeijer5-4/+28
Apparently this was supported before, but support for that was lost in bd1fdd87eed48ba3ffcc413936d6a6a60a429a97. Fixes #46
2024-01-30Apply readability-delete-null-pointer fixitsThorbjørn Lindeijer5-24/+11
These checks are unnecessary as deleting a null pointer has no effect.
2024-01-29Fixed logic error in ManaServ::BeingHandlerThorbjørn Lindeijer1-5/+6
2024-01-29Removed unused SpecialEntry::mLevelLabelThorbjørn Lindeijer1-2/+0
2024-01-29Removed unused includes in various filesThorbjørn Lindeijer20-41/+7
2024-01-29Removed remnants of alpha cache in ResourceManagerThorbjørn Lindeijer3-38/+0
Continuation of 2c51c98625b225cecfb9628c30d62d4e30f7e3e1, which had already removed most of the alpha cache in Image.
2024-01-29Updated ChatLogger::secureName to fixed versionThorbjørn Lindeijer2-9/+19
Using the latest implementation from ManaPlus. Previous version was introduced with 844e9a7a72faca6a212e788a3adc45e17f41dca6 and failed to "secure" the name due to broken conditions.
2024-01-29Apply C++11 fixitsThorbjørn Lindeijer70-542/+409
modernize-loop-convert modernize-deprecated-headers
2024-01-29Updated PhysFS RWops helper to the latest versionThorbjørn Lindeijer2-59/+117
Fixes compatibility with SDL2. The old version compiled for whatever reason, but it would crash when the client tried to play a sound.
2024-01-29Fixed another crash due to incomplete SDL2 upgradeThorbjørn Lindeijer1-1/+1
SDL_GetKeyboardState array needs to be indexed by scan codes.
2024-01-28Fixed crash due to SDL2 porting issueThorbjørn Lindeijer1-1/+2
SDL_GetKeyState used to return an array that is indexed by SDLKey, but its equivalant, SDL_GetKeyboardState, returns an array that is supposed to be indexed using SDL_Scancode.
2024-01-28Added support for map/layer maskThorbjørn Lindeijer11-65/+188
A custom "Mask" property on a layer or a "foregroundXmask" property on a map can now be used in combination with the SMSG_MAP_MASK to dynamically disable certain map layers from the server. Feature previously seen on ManaPlus and implemented for Mana client for compatibility. Also added a ResourceRef class for automating the Resource reference counting. Closes #44
2024-01-26Added fallback for XML data files and support absolute pathsThorbjørn Lindeijer1-14/+34
For compatibility with TMW, which has not yet adopted a central "settings.xml" that includes all the other files. Also, a "name" attribute with an absolute path is now supported in addition to the relative "file" attribute, since that is what ManaPlus supported. This resolves most of issue #43.