K
3a27725fcb
Optimize CMap::isInTheMap
...
replace x >= 0 && x < size by (unsigned)x < size
By converting signed coordinate to unsigned number, negative values became
very large positive ones, larger than every positive signed number and
therefore also bigger than the map size. As a result check against size
also implicitly checks if coordinate is negative.
Compiler cannot do this transformation automatically because it doesn't
know that map dimensions are always positive.
The change shrinks isInTheMap from 19 instructions to 11 on x86.
2024-08-22 11:39:24 +02:00
SoundSSGood
58bb2b58e3
IMarket suggestions
...
Co-authored-by: Ivan Savenko <saven.ivan@gmail.com>
2024-08-20 18:49:48 +03:00
SoundSSGood
39bb6d5f39
IMarket now able to store artifacts
2024-08-20 18:49:47 +03:00
Ivan Savenko
350749a1a6
Removed no longer used netpacks
2024-08-14 14:13:50 +00:00
Ivan Savenko
26fdaacbe5
Map and town events are now processed on start of player turn instead of
...
on start of new day, in line with H3
2024-08-14 14:13:50 +00:00
Ivan Savenko
5523e08cb7
Players affected by event is now stored as std::set instead of bitmask
2024-08-14 14:13:49 +00:00
Ivan Savenko
97f1a310df
Fix miscellaneous issues discovered by Sonar
2024-08-12 18:26:30 +00:00
Ivan Savenko
4aa73b40c9
Split CTownHandler into smaller chunks
2024-07-21 18:21:48 +00:00
Ivan Savenko
1aa391fdf8
Split CGeneralTextHandler file into 1 file per class form
...
All text processing code is now located in lib/texts.
No changes other than code being moved around and adjustment of includes
Moved without changes:
Languages.h -> texts/Languages.h
MetaString.* -> texts/MetaString.*
TextOperations.* -> texts/TextOperations.*
Split into parts:
CGeneralTextHandler.* -> texts/CGeneralTextHandler.*
-> texts/CLegacyConfigParser.*
-> texts/TextLocalizationContainer.*
-> texts/TextIdentifier.h
2024-07-20 12:55:17 +00:00
Ivan Savenko
2d3734656d
Fix test
2024-07-19 12:17:06 +00:00
Ivan Savenko
2020d96070
Merge pull request #4071 from IvanSavenko/fix_rng_syncronization
...
[1.6] Fix potential desync if client uses different stdlib with different random number generators
2024-07-19 13:08:09 +03:00
Alexander Wilms
434371195d
JsonNode constructors: Take fileName as argument
...
* Don't print JSON in JsonParser::parse() in case of errors
2024-07-17 13:50:59 +02:00
Ivan Savenko
1c63fefe02
Moved banks randomization to server-side with client netpack
2024-07-16 13:13:39 +00:00
Ivan Savenko
63bcf7d83c
Replaced most of usages of CRandomGenerator with vstd::RNG in library
2024-07-16 13:13:07 +00:00
Ivan Savenko
fd04320815
Merge pull request #4267 from IvanSavenko/sonar_fix
...
Fixed new issues detected by SonarCloud
2024-07-16 12:23:08 +03:00
Ivan Savenko
3134d8383c
Merge pull request #4207 from Laserlicht/map_format_additional
...
[1.6] Map format additional infos
2024-07-16 12:15:58 +03:00
Ivan Savenko
c00a1e1b0c
Fixed new issues detected by SonarCloud
2024-07-15 07:46:40 +00:00
Ivan Savenko
6b8f94e6e7
Merge remote-tracking branch 'vcmi/master' into develop
2024-07-11 17:43:44 +00:00
K
d3c198678c
reorder fields to shrink struct TerrainTile from 96 to 80 bytes
...
When I was playing a very large map, computer's turn took up to 2 minutes and that give me time to fire up perf and profile the code while waiting.
I noticed that 1.7% of time was spent in function CPathfinderHelper::getNeighbors and half of that on a single load from an array backing multi_array of TerrainTiles. That signals the CMap::terrain is too big to fit in CPU caches.
This patch reorders fields in TerrainTile struct, shrinking it from 96 bytes to 80 bytes and hopefully helping to keep more tiles in the cache and speeding things up a little bit.
2024-07-07 12:53:29 +00:00
Laserlicht
02bd52041b
extend map format
2024-06-29 13:13:59 +02:00
Tomasz Zieliński
d7a4ea9f32
Draw random artifact as an atomic operation
2024-06-24 20:06:50 +02:00
Alexander Wilms
02e429e973
Fix typos using https://github.com/crate-ci/typos
...
Changes were reviewed manually
2024-06-24 03:47:19 +02:00
Ivan Savenko
3bea383b59
Merge branch 'vcmi/beta' into 'vcmi/develop'
2024-06-21 12:58:36 +00:00
Ivan Savenko
c68f2da977
Fix initialization of gold pile from random resource with fixed amount
2024-06-17 20:08:07 +00:00
Andrey Filipenkov
bf832d4b13
fix building editor with Apple Clang 15
2024-06-13 06:38:15 +03:00
Ivan Savenko
df83fa33a1
Merge branch 'vcmi/master' into 'vcmi/develop'
2024-05-31 09:34:21 +00:00
Ivan Savenko
5d6470e527
Merge pull request #4025 from IvanSavenko/shared_ptr_lib
...
[1.6] Use shared_ptr for library entities
2024-05-30 19:14:06 +03:00
Ivan Savenko
49138e3de9
Fixes Adrienne starting without Inferno spell in campaign
2024-05-29 14:28:36 +00:00
Ivan Savenko
7461df161c
lib now uses shared_ptr for entities. Removed manual memory management.
2024-05-17 15:04:05 +00:00
Ivan Savenko
84bc6c42db
Added 'Serializeable' base class for classes serializeable by pointer
2024-05-16 18:40:59 +00:00
Ivan Savenko
0ce78cae06
Merge pull request #3926 from IvanSavenko/optimize_map_list_load
...
[1.5.1] Improve performance of parsing of map headers for map list
2024-05-11 21:56:58 +03:00
Ivan Savenko
31401e219f
Fix possible crash on nullptr dereference
2024-05-11 13:19:07 +00:00
Ivan Savenko
3acc1f1845
Improve performance of parsing of map headers for map list
2024-05-10 14:30:39 +00:00
Ivan Savenko
6ba6e0d55b
Moved serialization of ModCompatibilityInfo from MapFormat
2024-04-23 17:15:59 +03:00
Ivan Savenko
a6dead7725
Fixed loading of text strings for hota quests
2024-04-22 13:49:17 +03:00
Tomasz Zieliński
9305f360d1
Actually, lava will only have 3 obstacle sets without mods
2024-04-13 20:56:05 +02:00
Tomasz Zieliński
50ae067a60
Build fix
2024-04-13 19:33:47 +02:00
Tomasz Zieliński
f491f10d81
Final tweaks
2024-04-13 19:21:01 +02:00
Tomasz Zieliński
4fa7f0e93d
Also allow filtering biomes by faction(s)
2024-04-12 10:25:13 +02:00
Tomasz Zieliński
a356fdaf2a
Allow filtering obstacles by faction aligmnment
2024-04-11 18:10:14 +02:00
Tomasz Zieliński
d9a598ad9c
Merge remote-tracking branch 'origin/develop' into biome_system
2024-04-08 15:01:17 +02:00
Tomasz Zieliński
3e3959d360
Move all OH3 objects and obstacle sets to a mod
2024-04-08 12:50:41 +02:00
Tomasz Zieliński
86cffb3a77
Removed unused variable
2024-04-06 18:12:44 +02:00
Tomasz Zieliński
73ec53a9e0
Fix build
2024-04-06 15:29:15 +02:00
Tomasz Zieliński
b0cff23c37
Cleanup
2024-04-06 15:06:08 +02:00
Tomasz Zieliński
305e2bdf2f
Load obstacle sets from json in mods
2024-04-05 08:31:05 +02:00
Tomasz Zieliński
b1a5693612
Proof of concept with OH3 obstacles
2024-04-04 21:39:01 +02:00
Tomasz Zieliński
8ed940d538
cleanup
2024-04-03 22:24:19 +02:00
Tomasz Zieliński
9f048888dd
Restore previous removeObject
2024-04-03 22:17:36 +02:00
Tomasz Zieliński
12da0196a0
Restrict reindexing to random maps
2024-04-03 20:05:35 +02:00
Tomasz Zieliński
2a213f2276
Reindex objects to show interactive objects on top
2024-04-03 14:48:04 +02:00
Tomasz Zieliński
263d439605
Fix uninitialized variable
2024-03-24 07:54:11 +01:00
Ivan Savenko
922966dcf8
Renamed JsonNode::meta to more logical modScope. Member is now private
2024-02-26 12:55:49 +02:00
Ivan Savenko
08a27663f9
Reworked JsonNode constructors to more logical form
2024-02-26 12:55:49 +02:00
Ivan Savenko
54796c7c56
Rename toJson to toString/toCompactString for consistency
2024-02-26 12:55:49 +02:00
Ivan Savenko
c3957c2c2a
Moved json files to new directory, split on per-class basis
2024-02-14 13:08:24 +02:00
Ivan Savenko
7790acae3a
Fix save compatiblity with 1.4
2024-02-11 17:31:30 +02:00
Ivan Savenko
fd17133da3
Fix editor build
2024-02-06 00:40:26 +02:00
Ivan Savenko
9e09fe08e1
Fixed duplicated hero check - was used too early, before hero type is
...
loaded
2024-02-05 21:55:48 +02:00
Ivan Savenko
87059be67b
Added range checks to values read from h3m.
...
Fixes reading of morale/luck values (-3..3) as unsigned leading to
overflow.
2024-02-05 21:27:55 +02:00
Ivan Savenko
4af4d1a75e
Remove excessive logging
2024-02-05 21:11:00 +02:00
Ivan Savenko
2e4895766a
Implemented tracking of objects destroyed by players
2024-01-31 01:37:33 +02:00
Ivan Savenko
2a193effcc
Merge branch 'master' into 'develop'
2024-01-25 16:23:13 +02:00
Ivan Savenko
0c07384293
Refactoring of serialization versioning handling
...
- Removed 'version' field from serialize() method
- Handler classes - Binary(De)Serializer now have 'version' field
- Serialization versioning now uses named enum
Save compatibility with 1.4.X saves should be intact
2024-01-20 20:34:51 +02:00
Ivan Savenko
8e8d42bfa2
Try to simplify / cleanup code to localize crash
2024-01-20 18:40:03 +02:00
Ivan Savenko
ffd604c114
Removed unnecessary access to IHandler::objects
2024-01-19 13:56:06 +02:00
Ivan Savenko
60ffb81b33
Replaced remaining placeholder code with callbacks
2024-01-19 13:55:22 +02:00
Ivan Savenko
e67e4430ba
Removed most of non-const static fields in lib. Reduced header includes.
2024-01-19 13:55:22 +02:00
Ivan Savenko
a15366f5a5
Make IObjectInterface::cb non-static
2024-01-19 13:55:21 +02:00
Ivan Savenko
d5c4478816
Remove most of non-const access to VLC entities
2024-01-19 13:54:49 +02:00
Ivan Savenko
bd5682ecc3
Merge remote-tracking branch 'vcmi/master' into develop
2024-01-19 13:49:54 +02:00
Ivan Savenko
b1bd44de1e
Merge pull request #3298 from vcmi/random_prison_distributor
...
Fixes to hero / prison distribution
2024-01-18 16:03:08 +02:00
Alexander Wilms
73019c204d
Replace redundant types with auto
for the lvalues of template factory functions for smart pointers
...
grep -r --include \*.h --include \*.cpp "= std::" * | grep -v auto | grep -Po ".*[^ ]+ [^ ]+ [^ ]*[ ]*=.*;" | grep -v "auto\|int\|char\|bool\|float|\double\|for\|if\|googletest\|fuzzylite\|size_t\|using\|return" | grep -v double | grep -v si64 | grep -v si32 | grep -v ui32 | grep \< | grep -v float | tr -d '\t' | grep -v assert > redundant_types.txt
import re
with open("redundant_types.txt") as f:
for line in f:
line = line.strip()
path = line.split(":", 1)[0]
original_code = ":".join(line.split(":")[1:]).strip()
print()
print(path)
print(original_code)
prefix = "auto "
if original_code.startswith("static"):
static = True
else:
static = False
cpp_type = " ".join(original_code.split("=")[0].strip().split(" ")[0:-1])
print(cpp_type)
if static:
new_code = "static auto "+ " ".join(original_code.split(" ")[2:])
else:
new_code = "auto "+ " ".join(original_code.split(" ")[1:])
print(new_code)
if True:
with open(path, "r") as f:
filedata = f.read()
filedata = filedata.replace(original_code, new_code)
with open(path, "w") as f:
f.write(filedata)
2024-01-17 12:50:00 +00:00
Alexander Wilms
cca08e29da
Remove duplicate semicolons
2024-01-16 19:02:39 +00:00
Ivan Savenko
c7897300c0
Fixed missing translation strings on loading campaign save
...
- campaign header now contains text container and stores campaign texts
- map header now contains text container instead of inheriting it
- moved text container registration logic to a wraper class
- fixed registration of copied text containers (from copied map header)
2024-01-15 13:10:25 +02:00
Tomasz Zieliński
3aa67b3e5f
Merge remote-tracking branch 'origin/beta' into random_prison_distributor
2024-01-13 21:02:08 +01:00
Alexander Wilms
5e9f98b15c
Resolve intentionality issues
2024-01-10 00:23:24 +00:00
Alexander Wilms
f3277b7953
Define each identifier in a dedicated statement
2024-01-10 00:22:23 +00:00
Laserlicht
8b262e49a6
add sort for changedate
2024-01-07 20:17:44 +01:00
Ivan Savenko
480a0f19c0
Fix missing modded spells in magic guilds for h3m maps
2024-01-05 16:47:23 +02:00
Tomasz Zieliński
ebf2055afc
- Unban hero if related Prison is destroyed during map generation
...
- Move prison counter to PrisonHeroPlacer
2023-12-24 09:36:26 +01:00
Tomasz Zieliński
b0f0e9caa8
Merge remote-tracking branch 'origin/beta' into random_prison_distributor
2023-12-24 06:46:18 +01:00
Ivan Savenko
20ede710c2
Merge pull request #3362 from IvanSavenko/terrain_decorations
...
Terrain decorations level
2023-12-22 23:39:32 +02:00
Ivan Savenko
8916ae7bcd
Fix water generation, try to improve decoration level a bit
2023-12-22 18:35:38 +02:00
Ivan Savenko
19e851ddff
Implemented configurable level of decorations for terrains
2023-12-22 17:41:30 +02:00
Ivan Savenko
48a8826aa1
Merge pull request #3308 from vcmi/improve_treasure_placement
...
Improve treasure placement
2023-12-22 16:32:59 +02:00
Ivan Savenko
44a79c1ff4
Merge pull request #3327 from Laserlicht/datetime
...
date time format
2023-12-18 13:21:01 +02:00
Laserlicht
9299eaed36
code review
2023-12-16 21:10:27 +01:00
Laserlicht
56562ad8dc
date time format
2023-12-16 18:57:38 +01:00
Ivan Savenko
9ff00d75dc
Do not crash if Scholar is not a rewardable object
2023-12-16 13:46:29 +02:00
Tomasz Zieliński
b9193ecb73
Do not calculate area for invalid positions
2023-12-13 22:06:47 +01:00
Ivan Savenko
337e090ee9
Avoid crash in case if Witch Hut or Shrine is not a rewardable object
2023-12-13 16:52:44 +02:00
Tomasz Zieliński
8fe6a103cd
- Move Hero / Prison distribution to separate modificator
...
- Protect rolling and banning hero with mutex
2023-12-11 07:37:23 +01:00
Ivan Savenko
cd5d6a8f77
Fix loading of artifact ID for "transport item" victory condition
2023-12-03 19:45:18 +02:00
Ivan Savenko
a7d6068bf6
Do not ignore block-visit objects when computing guardian locations
2023-11-28 19:32:03 +02:00
Ivan Savenko
ee46fc806a
Add workaround to loading old map format
2023-11-27 14:09:08 +02:00
Ivan Savenko
e00d871082
Fix few more warnings on game start
2023-11-27 14:08:49 +02:00
Ivan Savenko
68de34e508
Workaround for starting map with invalid witch huts
2023-11-27 14:08:49 +02:00
Ivan Savenko
560a1231a6
Fix loading of maps with Grail or Diplomat Suit placed on map
2023-11-27 14:08:49 +02:00
Ivan Savenko
e979fb7056
Better fix for allowed heroes in h3m - allow all heroes from mods
2023-11-22 19:11:22 +02:00