Compare commits

...

38 Commits

Author SHA1 Message Date
b42a4b5dc8 Create new volumetric fog material and disable old one, create new wetness material and tie to settings, fixes for audio, rework weather data asset, optimize lamps 2026-10-29 23:17:55 +01:00
734b80a792 Fixes for benchmark 2026-10-25 16:37:30 +01:00
5598ac191f vegetation dressing for eleri island 2026-10-24 17:55:10 +02:00
2e9a09630c Som more set dressing for Eleri island 2026-10-24 00:10:35 +02:00
d0808fdc2b Set dressing for cave 2026-10-23 22:36:08 +02:00
807f485533 Remove old pcg stuff, move local fog volume in cave 2026-10-22 22:28:47 +02:00
b9d0b81171 More level dressing 2026-10-22 22:10:09 +02:00
695c55b956 More level dressing for Eleri island 2026-10-21 23:00:11 +02:00
17fb4956c6 Replacing rocks in the works, tweak grass tex and stone tex to be world aligned in the material 2026-10-20 22:27:07 +02:00
99ef6b8e39 Apply own material to rocks 2026-10-20 21:19:12 +02:00
caecd03860 Import rocks pack 2026-10-20 20:43:42 +02:00
ebb86dce1b Better graphics options 2026-10-20 00:02:38 +02:00
014b7a56fc Make orbs that you can pick up while flying, tweak GL settings, fix bug where game would not toggle main ui on start 2026-10-18 21:30:36 +02:00
3669080a6b Fix some bugs with merchant and options system 2026-10-17 23:11:58 +02:00
81af1b0214 Simple cutscene manager and a test cutscene 2026-10-17 00:42:47 +02:00
c7c6a014f3 Setup initial options menu 2026-10-13 20:37:24 +02:00
31164687c8 Initial audio subystem for music testing and first song to loop over 2026-10-13 17:21:21 +02:00
adc5756866 Some fixes for quest and started making Trish and her first quest 2026-10-06 23:05:57 +02:00
3ba640ac53 Fixes for starting dialogue 2026-10-05 23:10:10 +02:00
f2acd7eb4c Editor toling to easier create data assets 2026-10-05 10:59:45 +02:00
b3f4eefe06 Starting dialogue and requirments implemented 2026-10-05 10:17:27 +02:00
f2115c537b Implement an interact hold input action and a new callback for it, seed bed collect seed action as well, change lavender seed mesh to sprite 2026-10-01 22:01:54 +02:00
b5304a74aa Tweaks to the quests system and dialogue system bugfix, talking to npcs now triggers dialogue, questing UI made and some test quests and dialogue 2026-09-29 23:47:17 +02:00
fbb4ce616e Merge branch 'master' of https://adnanedinayukistuff.top/Ado/ProjectEleri 2026-09-28 20:07:00 +02:00
bbc16b3355 remove old quest system and assets, replace with v1 of new quest system 2026-09-28 20:06:13 +02:00
bcbbd533a3 Some settings for mac and trying out scalability settings 2026-09-26 22:53:58 +02:00
3a3a04b689 Reexport map textures and fixes for map marker, also fix for seed bed actor 2026-09-26 17:44:03 +02:00
812dea8382 Replace grass to landscape grass and new wind material 2026-09-26 14:46:21 +02:00
d173cf8b1e Finish map functionality, progress on base character template, tweak Eleri 2026-09-25 22:39:30 +02:00
aa4c87d88a Made map builder and exported first pass of maps 2026-09-25 14:42:07 +02:00
a97ce5de43 Replace chest because it was broken 2026-09-21 21:23:32 +02:00
472cac79c9 Display for schedule data asset timeline, view only 2026-09-20 16:43:11 +02:00
f3a428af94 Some housekeeping and some editor tools for schedules anchors 2026-09-20 15:50:23 +02:00
5d61de068c Massive changes to the npc system 2026-09-20 14:22:08 +02:00
1fe94cfa7a Fix for stat forge, setup a test character 2026-09-19 15:46:26 +02:00
ff35738d78 Initial npc schedule implementation 2026-09-19 13:53:28 +02:00
62c8e8e292 Fix for watering every hour and seed bed texture fixes 2026-09-18 21:27:30 +02:00
b0908e2e65 Implement mesh for crop and some fixes 2026-09-18 14:43:06 +02:00
1763 changed files with 20573 additions and 4032 deletions

View File

@@ -0,0 +1,248 @@
@ECHO OFF
REM Bakes the world map of the world partition map named at the end of each command below: the whole region as
REM one asset, and the same region cut into a grid of pieces as one asset each. Seventeen textures come out of a
REM full run, and the map UI in the game switches between them as it zooms: the whole region while the player is
REM looking at all of it, and the piece they are looking at once they are close enough for the whole map's pixel
REM to be a blur.
REM
REM The whole map is one texture over the whole region: on this map that is twelve thousand metres at 16384
REM pixels, which is 0.73 metres of world per pixel of picture, a map to open and see where one is. The pieces
REM are the same region cut into a 4 x 4 grid, so three thousand metres a side, and each piece is baked at 8192
REM pixels, which is 0.37 metres of world per pixel: half the world per pixel of the whole map, which is the
REM detail the zoomed in view is for. Both layers capture 2048 pixels of their own per tile, so a tile
REM of a piece costs the same to render as a tile of the whole map and the difference between the layers is only
REM how much world stands behind those pixels.
REM
REM The two layers are not a level of detail of each other, they are seventeen textures and the UI picks one, so
REM they have to agree about where the world is to the pixel: they are baked from the same region by the same
REM builder, and the piece a run bakes is the only thing about that the command lines below change. Nothing in
REM the game reads one of the seventeen; they are pictures, and where the world is inside one of them is a
REM question the settings actor answers separately.
REM
REM What the map covers is the WorldMapBounds of the OrthoMapCaptureActor in the map, which is the intended place
REM to set it: open the map, select the actor, type the bounds in and save the map. A commandlet reads the map
REM from disk, so a region that was never saved is not in what it reads.
REM
REM On this map the island stands on the origin and measures about 375 by 390 metres, centred within about 45
REM metres of it, so the region is the twelve kilometre square Min=(-600000,-600000,-100000)
REM Max=(600000,600000,100000). The island is then about a thirtieth of the width of the picture and most of the
REM rest is sea: ten of the whole map's sixty four tiles have anything in them, which is the island and what
REM stands around it near the origin and a second group of tiles away to the west of it. What every run prints
REM about its empty tiles is how that is checked. Z is not part of what the map covers, it is the height the
REM captures look down from, and the Z in the actor's own box is where a run that passes no region gets one from.
REM
REM WorldMapBounds is also what the game reads when it turns a position on the map back into a world position, so
REM the actor's numbers are the numbers this bake used, and the two cannot be allowed to drift apart. All six of
REM them have to be on the actor before the run below, which passes no region of its own.
REM
REM Four flags exist for running without the editor. All apply to this run only and all override the actor:
REM
REM -WorldMapBounds=minX,minY,maxX,maxY states the region outright, keeping the actor's Z. It wins over the
REM actor's own bounds, so it is the way to try a region out before
REM committing it to the map. The whole map run below does not pass it:
REM what gets baked is what the actor says.
REM -FitBounds takes the region from the partition instead. Do not use it on this
REM map. A world partition reports the bounds of its own sparse octree
REM grid rather than the bounds of its content, and an actor in this
REM map has a world sized bound of its own, which pushes the octree up
REM to a level 30 cell either side of the origin. It answers with a box
REM of +/-13743895347200 units, and a tile of that at eight tiles is
REM 3435973836800 units across, far more than a cell can hold, so
REM IsWorldMapGridValid refuses the bake and says so. The button of the
REM same name on the actor's details panel has the same problem, so set
REM the region by hand.
REM -WorldMapPiece=column,row bakes one piece of the region instead of the whole of it. The
REM column counts along +X from the region's Min end and the row counts
REM along +Y from the same corner, so (0, 0) is the far corner of the
REM map and the last piece is at the near one.
REM -WorldMapPieceGrid=n says how many pieces a side that index is being read in: four for
REM the 4 x 4 grid this script bakes. It has to be given with
REM -WorldMapPiece, because the same index in another grid of the same
REM region is a different square of the world, and it is only warned
REM about when it arrives without one.
REM
REM A piece run refuses -WorldMapBounds and -FitBounds rather than combining them with a piece, because the two
REM say different things about the same region: one states the region the pieces are cut out of, and the other
REM states the piece itself. A region that has been stated can be cut into any grid at all, so there is no one
REM right answer to what a piece of it means. Set the region on the actor first and then ask for a piece of it.
REM A piece index outside the grid is refused too, and so is a piece of a region that is not a whole number of
REM pieces across, which is a piece whose edges are not where the game thinks they are.
REM
REM -MapTextureSize and -TilesPerAxis shrink the map for a trial run: 512 pixels in 2 x 2 tiles walks the whole
REM grid in four steps, and still covers the same region, because a region read off the actor is re-aligned to
REM whatever grid the run actually walks. Given with -WorldMapPiece the same two shrink one piece instead, and
REM that re-alignment is skipped: a piece's box is a window cut out of the region the pieces tile, so it is the
REM tiles that follow the piece and not the other way round, and aligning a window to its own tile grid would
REM quietly bake a region that is not one of the pieces. The whole map run below passes neither, so it bakes at
REM the resolution and tile count set on the actor, which for this map are 16384 in eight tiles; the piece runs
REM pass both, because 8192 in four tiles is what a piece is.
REM
REM The grid, and what the pieces are called. A piece goes beside the whole map in the same folder, named after it
REM with the grid and the piece's own place on the end, so this map's seventeen assets are
REM WorldMap_Persistent_GameWorld and WorldMap_Persistent_GameWorld_Piece4x4_0_0 through _Piece4x4_3_3. Column 0
REM is the end of the region at its Min and row 0 is the same corner, which puts this map's grid like this:
REM
REM row 3: (0,3) (1,3) (2,3) (3,3) every piece 3000 x 3000 metres
REM row 2: (0,2) (1,2) (2,2) (3,2) the region Min=(-600000,-600000) Max=(600000,600000)
REM row 1: (0,1) (1,1) (2,1) (3,1) +X runs along a row, +Y up a column
REM row 0: (0,0) (1,0) (2,0) (3,0) the origin is the corner the four middle pieces share
REM +--------------------------+
REM col 0 col 1 col 2 col 3
REM
REM The island stands on the origin, so it falls across the four middle pieces (1,1) (2,1) (1,2) and (2,2), and
REM Min=(-300000,-300000) Max=(300000,300000) covers those four and no others. The other twelve pieces are open
REM sea: a bake of one of those that reports a tile with the island in it has the region wrong, and one of the
REM four that reports nothing at all has it wrong the other way.
REM
REM Where the baked map goes is set on the actor too, by OutputPackageFolder, and the asset in it is named after
REM the map it was baked from: this map bakes to /Game/Maps/Generated/WorldMap_Persistent_GameWorld, and baking
REM it again replaces that same asset rather than making a second one. A piece is named the same way with its
REM grid, column and row on the end, so the sixteen of them sit beside the whole map in the same folder and
REM re-baking one piece is a change to one asset. That folder and WorldMapWarmupFrames are read off the actor as
REM well and have to be set there, so a bake of a map whose actor has no output folder is refused before it
REM renders anything.
REM
REM -DebugCapture also writes every tile it captures to Intermediate\WorldMap as a bitmap, and the stitched map as
REM a PNG, and both are named after the asset the run is baking and after the tile's own place in the grid that
REM run walked:
REM
REM WorldMap_Persistent_GameWorld-Tile_<column>_<row>.bmp the whole map, one file a tile
REM WorldMap_Persistent_GameWorld.png the whole map, stitched
REM WorldMap_Persistent_GameWorld_Piece4x4_<c>_<r>-Tile_<c>_<r>.bmp one piece, one file a tile
REM WorldMap_Persistent_GameWorld_Piece4x4_<c>_<r>.png one piece, stitched
REM
REM Those two are the pair to look at when a bake comes out wrong: the tiles say whether each square captured
REM what it should have, and the stitched map says whether they were placed in the right squares. The asset name
REM in front of the tile index is what keeps the tiles of one piece from overwriting another's, which is in turn
REM what makes the strip of tiles along a shared edge worth comparing: a seam between two pieces that is in the
REM world reads as one line in each of them, and a seam the bake made reads as a difference.
REM
REM It is not on by default because it is a great deal of bitmap. A tile of this bake is 2048 pixels square at
REM four bytes a pixel, which is sixteen megabytes, so the sixty four of the whole map are most of a gigabyte and
REM the sixteen of one piece are a quarter of that. Add it to a command line below, or to the end of a manual
REM run, when there is something to look at, and to one piece at a time when it is a seam being looked at.
REM
REM A full run of this script is seventeen commandlet runs: sixty four tiles for the whole map and sixteen for
REM each of the sixteen pieces, which is three hundred and twenty tiles in all. On the machine this was written on
REM all seventeen took eight and a half minutes, first log line to last. Almost none of that is capture: the whole
REM map walks its sixty four tiles in seventeen seconds and a piece its sixteen in three to five, so the great
REM majority of every run is the editor starting, reading the map and building the texture. Building is where the
REM memory goes rather than the time: the whole map run peaks at eleven and a half gigabytes of physical memory,
REM against the twelve gigabytes its sixteen thousand pixel texture reports needing while it is built, and a piece
REM run peaks at five and a half against the three its eight thousand pixel one does. The runs are one after
REM another rather than at once for the same reason a bake is one at a time: two of them at once would be two
REM editors with a renderer each, holding two of these textures at the same time.
REM
REM What comes out is seventeen virtual textures, which is what lets a renderer hold a map of this size at all: a
REM sixteen thousand pixel one that covers the whole region and sixteen eight thousand pixel ones that each cover a
REM sixteenth of its area. They are small on disk because the region is all but empty. This map's own bake wrote the
REM whole map as one and a half megabytes, the six pieces that have anything in them as between a third of a
REM megabyte and two, and the ten that hold nothing but sea as fourteen kilobytes each, eight megabytes for the
REM seventeen together. Where a map this size is large is on the card rather than on disk: what showing one needs is
REM a virtual texture pool big enough for the part of it that is on screen, and this project's pool section gives it
REM sixty four megabytes by default and, with bPoolAutoGrowInEditor off, does not grow while the editor runs. Sixty
REM four megabytes is a great many of the pages these are cut into, and one of them on a screen is a small part of
REM the pool; the entry to raise, if a UI ever shows more of them at once than the pool holds, is
REM DefaultSizeInMegabyte in that section of Config\DefaultEngine.ini.
REM
REM The tiles that come back empty are counted out loud by every run, and that count is the quickest way to see a
REM region that no longer covers the world: a region that has shrunk onto the world reports few or none of them
REM empty, and one that has grown past the world reports all of them. On this map a whole map bake reports fifty
REM four of its sixty four tiles empty, so ten of them have something in them, and the sixteen pieces report
REM between ten and sixteen of their sixteen: ten of the pieces are all sea and come back entirely empty, the two
REM west of the island report ten, the two the island's own corner is in report thirteen and the two east of those
REM report fifteen. Those counts are of the world rather than of the bake, so they move when the map does; what is
REM worth reading them for is a count that has gone to all empty or all full, which is the region and not the bake.
REM -AllowCommandletRendering is not optional. A builder that captures is refused without it, because a
REM commandlet has no renderer unless it is told to start one.
REM
REM The per corner coverage check is only as talkative as its own log category, which does not print its Verbose
REM lines by default. A corner that lands outside its own tile is an Error and stops the walk, so a run that
REM reaches the end of the grid has passed every corner of it.
REM
REM The editor commandlet has to be the same configuration the project modules were built in, or it will load
REM modules that do not contain this builder. DebugGame is what a local build produces; uncomment the
REM Development line to bake with a development build instead, which is the faster of the two.
REM
REM Every run below is logged to a file of its own under Intermediate\WorldMap as well as to the window: the whole
REM map to whole-map.log and a piece to piece-<column>-<row>.log, which is what makes a bake of seventeen runs
REM readable after the fact. -abslog takes an absolute path, which is what %PROJECT_ROOT% below is for: the logs
REM land in the project's own intermediate folder whatever directory this file is run from. It also moves that
REM run's log out of the editor's Saved\Logs, and the file is written as the run goes rather than at its end, so
REM one can be read, or tailed, while its bake is still walking the grid.
SET EDITOR_CMD=C:/Program Files/Epic Games/UE_5.8/Engine/Binaries/Win64/UnrealEditor-Win64-DebugGame-Cmd.exe
REM SET EDITOR_CMD=C:/Program Files/Epic Games/UE_5.8/Engine/Binaries/Win64/UnrealEditor-Cmd.exe
SET PROJECT=C:/Projects/ProjectEleri/ProjectEleri.uproject
REM The project's own folder, taken from the project file above so that this file can be run from anywhere: the
REM per run logs and the trial run both hang off it.
FOR %%I IN ("%PROJECT%") DO SET PROJECT_ROOT=%%~dpI
REM What a run of this file bakes. The whole map is baked at whatever resolution and tile count the settings actor
REM carries, which for this map are 16384 in eight tiles; a piece is baked at the two numbers below, because 8192
REM pixels over a quarter of the width is what a piece is.
SET MAP=/Game/Maps/Persistent_GameWorld
SET BUILDER=-run=WorldPartitionBuilderCommandlet -Builder=/Script/ProjectEleriEditor.WorldMapBuilder -AllowCommandletRendering -SCCProvider=None -unattended -Verbose
SET PIECE_SIZE=4096
SET PIECE_TILES=4
SET PIECE_GRID=8
SET PIECE_ROOT=%PROJECT_ROOT%Intermediate\WorldMap
REM Whether to bake the whole map as well as the pieces. Set to 0 to bake only the sixteen pieces, which is what
REM a run that changed the piece numbers and nothing else wants.
SET WHOLE_MAP=1
REM Bake one piece instead of all sixteen: its column and row as -WorldMapPiece takes them, or empty for all of
REM them. ONLY_PIECE=1,1 is the piece the island's own corner is in, and is the one to bake when the piece layer
REM is being tried out rather than built.
SET ONLY_PIECE=
IF NOT EXIST "%PIECE_ROOT%" MKDIR "%PIECE_ROOT%"
REM The geometry trial of one piece: four tiles of 512 pixels over the whole square a real piece covers, with a
REM bitmap of each to look at. It bakes one asset rather than seventeen and its log says which region that was,
REM so it is the cheap first thing to run when the piece arithmetic in the builder changes.
REM "%EDITOR_CMD%" "%PROJECT%" %BUILDER% %MAP% -WorldMapPiece=0,0 -WorldMapPieceGrid=%PIECE_GRID% -MapTextureSize=512 -TilesPerAxis=2 -DebugCapture -log -stdout
IF "%WHOLE_MAP%"=="1" (
ECHO "Baking the whole map..."
"%EDITOR_CMD%" "%PROJECT%" %BUILDER% %MAP% -abslog="%PIECE_ROOT%\whole-map.log" -log -stdout
IF ERRORLEVEL 1 GOTO :BAKE_FAILED
)
ECHO "Baking the sixteen pieces..."
SET /A PIECE_LAST=%PIECE_GRID% - 1
FOR /L %%R IN (0,1,%PIECE_LAST%) DO (
FOR /L %%C IN (0,1,%PIECE_LAST%) DO (
CALL :bake_piece %%C %%R
IF ERRORLEVEL 1 GOTO :BAKE_FAILED
)
)
ECHO "DONE! The whole map and the sixteen pieces of it are in the output folder set on the settings actor."
PAUSE
EXIT /B 0
:BAKE_FAILED
ECHO "A run failed, so the pieces after it were not baked. The run that failed says why in the log above."
ECHO "Fix it and run this file again: the runs that succeeded are saved already, and both the failed run and the"
ECHO "skipped ones replace what is there rather than making second assets. To bake one of them on its own, set"
ECHO "ONLY_PIECE at the top of this file to its column and row and set WHOLE_MAP to 0."
PAUSE
EXIT /B 1
REM One piece: the region comes from the actor and the piece from the two arguments, which are its column and its
REM row. A piece that is not the one ONLY_PIECE asks for is skipped without a word, which is what makes that
REM setting a way to bake one piece through the same loop as all sixteen.
:bake_piece
IF NOT "%ONLY_PIECE%"=="" IF NOT "%ONLY_PIECE%"=="%1,%2" EXIT /B 0
ECHO "Baking piece %1,%2..."
"%EDITOR_CMD%" "%PROJECT%" %BUILDER% %MAP% -WorldMapPiece=%1,%2 -WorldMapPieceGrid=%PIECE_GRID% -MapTextureSize=%PIECE_SIZE% -TilesPerAxis=%PIECE_TILES% -abslog="%PIECE_ROOT%\piece-%1-%2.log" -log -stdout
IF ERRORLEVEL 1 EXIT /B 1
EXIT /B 0

View File

@@ -14,7 +14,7 @@ ThreePlayerSplitscreenLayout=FavorTop
GlobalDefaultGameMode=/Game/ThirdPersonBP/Blueprints/ThirdPersonGameMode.ThirdPersonGameMode_C GlobalDefaultGameMode=/Game/ThirdPersonBP/Blueprints/ThirdPersonGameMode.ThirdPersonGameMode_C
GlobalDefaultServerGameMode=None GlobalDefaultServerGameMode=None
ServerDefaultMap=None ServerDefaultMap=None
GameInstanceClass=/Game/ThirdPersonBP/Blueprints/BP_EleriGameInstance.BP_EleriGameInstance_C GameInstanceClass=/Game/EasyOptionsMenu/EasyGameUI/GI_EasyMainGameInstance.GI_EasyMainGameInstance_C
[/Script/IOSRuntimeSettings.IOSRuntimeSettings] [/Script/IOSRuntimeSettings.IOSRuntimeSettings]
MinimumiOSVersion=IOS_11 MinimumiOSVersion=IOS_11
@@ -39,7 +39,7 @@ r.Mobile.UseLegacyShadingModel=False
r.Mobile.AllowDitheredLODTransition=True r.Mobile.AllowDitheredLODTransition=True
r.Mobile.AllowSoftwareOcclusion=False r.Mobile.AllowSoftwareOcclusion=False
r.VirtualTextures=True r.VirtualTextures=True
r.DiscardUnusedQuality=True r.DiscardUnusedQuality=False
r.AllowOcclusionQueries=True r.AllowOcclusionQueries=True
r.MinScreenRadiusForLights=0.030000 r.MinScreenRadiusForLights=0.030000
r.MinScreenRadiusForDepthPrepass=0.030000 r.MinScreenRadiusForDepthPrepass=0.030000
@@ -72,7 +72,7 @@ r.TranslucentSortPolicy=0
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000) TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
r.CustomDepth=3 r.CustomDepth=3
r.CustomDepthTemporalAAJitter=False r.CustomDepthTemporalAAJitter=False
r.PostProcessing.PropagateAlpha=0 r.PostProcessing.PropagateAlpha=False
r.DefaultFeature.Bloom=True r.DefaultFeature.Bloom=True
r.DefaultFeature.AmbientOcclusion=True r.DefaultFeature.AmbientOcclusion=True
r.DefaultFeature.AmbientOcclusionStaticFraction=False r.DefaultFeature.AmbientOcclusionStaticFraction=False
@@ -101,7 +101,7 @@ r.SelectiveBasePassOutputs=False
bDefaultParticleCutouts=False bDefaultParticleCutouts=False
fx.GPUSimulationTextureSizeX=1024 fx.GPUSimulationTextureSizeX=1024
fx.GPUSimulationTextureSizeY=1024 fx.GPUSimulationTextureSizeY=1024
r.AllowGlobalClipPlane=True r.AllowGlobalClipPlane=False
r.GBufferFormat=1 r.GBufferFormat=1
r.MorphTarget.Mode=True r.MorphTarget.Mode=True
r.GPUCrashDebugging=False r.GPUCrashDebugging=False
@@ -113,7 +113,7 @@ vr.RoundRobinOcclusion=False
vr.ODSCapture=False vr.ODSCapture=False
r.MeshStreaming=False r.MeshStreaming=False
r.WireframeCullThreshold=5.000000 r.WireframeCullThreshold=5.000000
r.RayTracing=False r.RayTracing=True
r.RayTracing.UseTextureLod=False r.RayTracing.UseTextureLod=False
r.SupportStationarySkylight=True r.SupportStationarySkylight=True
r.SupportLowQualityLightmaps=True r.SupportLowQualityLightmaps=True
@@ -144,23 +144,6 @@ r.DynamicGlobalIlluminationMethod=0
r.MSAACount=2 r.MSAACount=2
r.Lumen.AsyncCompute=1 r.Lumen.AsyncCompute=1
r.Lumen.HardwareRayTracing=1 r.Lumen.HardwareRayTracing=1
r.Lumen.HardwareRayTracing.LightingMode=0
r.LumenScene.SurfaceCache.Resolution=0.25
r.LumenScene.SurfaceCache.NumFramesToKeepUnused=2
r.Lumen.MaxTraceDistance=5000
r.Lumen.Scene.ViewDistance=5000
r.Lumen.DiffuseIndirect.DenoisingMethod=1
r.Lumen.DiffuseIndirect.NumProbes=1
r.Lumen.ScreenProbeGather.DownsampleFactor=32
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=4
r.LumenScene.UpdateViewDistance=5000
r.LumenScene.DirectLighting.MaxMeshSDFShadowTraceDistance=1000
r.Lumen.TranslucencyVolume.GridPixelSize=64
r.Lumen.TranslucencyVolume.TraceCount=1
r.Lumen.DiffuseIndirect.TemporalFilter=1
r.Lumen.DiffuseIndirect.TemporalMaxFramesAccumulated=60
r.Lumen.TraceMeshSDFs=0
r.Lumen.Reflections.HardwareRayTracing.Translucent.Refraction.EnableForProject=False
r.Streaming.PoolSize=2048 r.Streaming.PoolSize=2048
@@ -191,13 +174,15 @@ r.SupportExpFogMatchesVolumetricFog=False
r.SSGI.Quality=4 r.SSGI.Quality=4
r.VolumetricRenderTarget.Mode=1 r.VolumetricRenderTarget.Mode=1
r.VolumetricCloud.ViewRaySampleMaxCount=64
r.VolumetricCloud=0
r.DistanceFieldAO=0 r.DistanceFieldAO=0
r.DistanceFieldShadowing=0 r.DistanceFieldShadowing=0
r.AmbientOcclusionLevels=1 r.AmbientOcclusionLevels=1
r.Shadow.CSMCaching=0 r.Shadow.CSMCaching=0
r.DOF.Recombine.Quality=1 r.DOF.Recombine.Quality=1
r.Deferred.SupportPrimitiveAlphaHoldout=False
[/Script/LinuxTargetPlatform.LinuxTargetSettings] [/Script/LinuxTargetPlatform.LinuxTargetSettings]
TargetArchitecture=X86_64UnknownLinuxGnu TargetArchitecture=X86_64UnknownLinuxGnu
@@ -344,9 +329,10 @@ r.FidelityFX.FSR2.UseSSRExperimentalDenoiser=True
[/Script/NavigationSystem.NavigationSystemV1] [/Script/NavigationSystem.NavigationSystemV1]
bAutoCreateNavigationData=False bAutoCreateNavigationData=False
bAllowClientSideNavigation=True bAllowClientSideNavigation=True
DataGatheringMode=Lazy
[/Script/Engine.UserInterfaceSettings] [/Script/Engine.UserInterfaceSettings]
RenderFocusRule=Always RenderFocusRule=Never
bEnableDistanceFieldFontRasterization=True bEnableDistanceFieldFontRasterization=True
[Core.Log] [Core.Log]
@@ -427,3 +413,24 @@ pcg.GlobalDisableRefresh=True
[/Script/Engine.WorldPartitionSettings] [/Script/Engine.WorldPartitionSettings]
bNewMapsEnableWorldPartition=True bNewMapsEnableWorldPartition=True
[/Script/NavigationSystem.RecastNavMesh]
RuntimeGeneration=Dynamic
[/Script/GameplayDebugger.GameplayDebuggerConfig]
ActivationKey=+
[/Script/Engine.AudioSettings]
DefaultSoundClassName=/Game/EasyOptionsMenu/Core/Audio/SC_EOM_MasterAudio.SC_EOM_MasterAudio
DefaultMediaSoundClassName=/Game/EasyOptionsMenu/Core/Audio/SC_EOM_MasterAudio.SC_EOM_MasterAudio
DefaultBaseSoundMix=/Game/EasyOptionsMenu/Core/Audio/SCM_EOM_MasterMix.SCM_EOM_MasterMix
; iOS/Mac code signing. UBT copies these into Intermediate/ProjectFilesIOS/XcconfigsIOS/
; ProjectEleri.xcconfig (DEVELOPMENT_TEAM / UE_SIGNING_PREFIX) whenever the project files are
; regenerated, and BUILD/BuildIOS.sh reads them back from there. Team M4QQ2RV23X is the
; "Personal Team" of the Apple ID signed into Xcode (adnan.mujkic97@gmail.com).
[/Script/MacTargetPlatform.XcodeProjectSettings]
bUseAutomaticCodeSigning=True
CodeSigningTeam=M4QQ2RV23X
CodeSigningPrefix=com.adnanmujkic
IOSSigningIdentity=Apple Development

View File

@@ -6,11 +6,11 @@ ProjectName=Eleri's book of potions
Build=IfProjectHasCode Build=IfProjectHasCode
BuildConfiguration=PPBC_DebugGame BuildConfiguration=PPBC_DebugGame
BuildTarget= BuildTarget=
FullRebuild=False FullRebuild=True
ForDistribution=False ForDistribution=False
IncludeDebugFiles=False IncludeDebugFiles=False
UsePakFile=True UsePakFile=True
bUseIoStore=False bUseIoStore=True
bUseZenStore=True bUseZenStore=True
bMakeBinaryConfig=False bMakeBinaryConfig=False
bGenerateChunks=False bGenerateChunks=False
@@ -39,7 +39,7 @@ IncludePrerequisites=False
IncludeAppLocalPrerequisites=False IncludeAppLocalPrerequisites=False
bShareMaterialShaderCode=True bShareMaterialShaderCode=True
bDeterministicShaderCodeOrder=False bDeterministicShaderCodeOrder=False
bSharedMaterialNativeLibraries=True bSharedMaterialNativeLibraries=False
ApplocalPrerequisitesDirectory=(Path="") ApplocalPrerequisitesDirectory=(Path="")
IncludeCrashReporter=False IncludeCrashReporter=False
InternationalizationPreset=English InternationalizationPreset=English
@@ -109,6 +109,8 @@ bSkipMovies=False
+MapsToCook=(FilePath="/Game/Maps/W_Island_1") +MapsToCook=(FilePath="/Game/Maps/W_Island_1")
+DirectoriesToAlwaysCook=(Path="/Game/GameData") +DirectoriesToAlwaysCook=(Path="/Game/GameData")
+DirectoriesToAlwaysCook=(Path="/NNEDenoiser") +DirectoriesToAlwaysCook=(Path="/NNEDenoiser")
+DirectoriesToAlwaysCook=(Path="/Game/Textures/Map")
+DirectoriesToAlwaysCook=(Path="/Game/Maps/Generated")
bRetainStagedDirectory=False bRetainStagedDirectory=False
CustomStageCopyHandler= CustomStageCopyHandler=
@@ -170,7 +172,11 @@ bMoviesAreSkippable=False
[/Script/ProjectEleri.EleriGameSettings] [/Script/ProjectEleri.EleriGameSettings]
SpecialItemsMap=(((TagName="Items.Gold"), "ItemDataAsset:DA_Gold"),((TagName="Items.Crystals.Air"), "ItemDataAsset:DA_CrystalAir"),((TagName="Items.Crystals.Earth"), "ItemDataAsset:DA_CrystalEarth"),((TagName="Items.Crystals.Fire"), "ItemDataAsset:DA_CrystalFire"),((TagName="Items.Crystals.Water"), "ItemDataAsset:DA_CrystalWater")) SpecialItemsMap=(((TagName="Items.Gold"), "ItemDataAsset:DA_Gold"),((TagName="Items.Crystals.Air"), "ItemDataAsset:DA_CrystalAir"),((TagName="Items.Crystals.Earth"), "ItemDataAsset:DA_CrystalEarth"),((TagName="Items.Crystals.Fire"), "ItemDataAsset:DA_CrystalFire"),((TagName="Items.Crystals.Water"), "ItemDataAsset:DA_CrystalWater"))
RemovableStaticMeshClass=/Script/Engine.BlueprintGeneratedClass'/Game/Prefabs/BP_RemovableStaticMeshActor.BP_RemovableStaticMeshActor_C'
ItemSeedCarouselClass=None
CameraZoomLevels=(((TagName="Camera.BoomOffset.Default"), (X=-1200.000000,Y=0.000000,Z=50.000000)),((TagName="Camera.BoomOffset.Cave"), (X=-800.000000,Y=0.000000,Z=40.000000)),((TagName="Camera.BoomOffset.Flying"), (X=-1500.000000,Y=0.000000,Z=60.000000))) CameraZoomLevels=(((TagName="Camera.BoomOffset.Default"), (X=-1200.000000,Y=0.000000,Z=50.000000)),((TagName="Camera.BoomOffset.Cave"), (X=-800.000000,Y=0.000000,Z=40.000000)),((TagName="Camera.BoomOffset.Flying"), (X=-1500.000000,Y=0.000000,Z=60.000000)))
ExpIncreaseEffectClass=/Script/Engine.BlueprintGeneratedClass'/Game/Blueprints/GameEffects/GSE_AddExp_Template.GSE_AddExp_Template_C'
MovementDisableEffectClass=/Script/Engine.BlueprintGeneratedClass'/Game/Blueprints/GameEffects/GSE_MovementDisabled.GSE_MovementDisabled_C'
+ProfessionExpArray=100.000000 +ProfessionExpArray=100.000000
+ProfessionExpArray=500.000000 +ProfessionExpArray=500.000000
+ProfessionExpArray=1500.000000 +ProfessionExpArray=1500.000000
@@ -191,12 +197,14 @@ CameraZoomLevels=(((TagName="Camera.BoomOffset.Default"), (X=-1200.000000,Y=0.00
+ProfessionExpArray=180000.000000 +ProfessionExpArray=180000.000000
+ProfessionExpArray=208000.000000 +ProfessionExpArray=208000.000000
+ProfessionExpArray=240000.000000 +ProfessionExpArray=240000.000000
ExpIncreaseEffectClass=/Script/Engine.BlueprintGeneratedClass'/Game/Blueprints/GameEffects/GSE_AddExp_Template.GSE_AddExp_Template_C' NpcSchedules=(((TagName="NpcTags.Test"), "/Game/GameData/Npc/DT_Test_Npc_Schedule.DT_Test_Npc_Schedule"))
GlobalSettingsDataSheet=/Game/GameData/CSV/GlobalKeyValueSettings.GlobalKeyValueSettings GlobalSettingsDataSheet=/Game/GameData/CSV/GlobalKeyValueSettings.GlobalKeyValueSettings
ItemSeedCarouselClass=None
RemovableStaticMeshClass=/Script/Engine.BlueprintGeneratedClass'/Game/Prefabs/BP_RemovableStaticMeshActor.BP_RemovableStaticMeshActor_C'
MovementDisableEffectClass=/Script/Engine.BlueprintGeneratedClass'/Game/Blueprints/GameEffects/GSE_MovementDisabled.GSE_MovementDisabled_C'
SpriteShadowMaterial=/Game/Materials/Sprite/MI_SpriteShadow_Inst.MI_SpriteShadow_Inst SpriteShadowMaterial=/Game/Materials/Sprite/MI_SpriteShadow_Inst.MI_SpriteShadow_Inst
AudioChannelSoundClasses=((Master, "/Game/EasyOptionsMenu/Core/Audio/SC_EOM_MasterAudio.SC_EOM_MasterAudio"),(Music, "/Game/EasyOptionsMenu/Core/Audio/SC_EOM_MusicAudio.SC_EOM_MusicAudio"),(SFX, "/Game/EasyOptionsMenu/Core/Audio/SC_EOM_EffectsAudio.SC_EOM_EffectsAudio"))
+DefaultSoundtracks=/Game/Sounds/Music/LoFi_First_Try.LoFi_First_Try
SoundtrackMinDelay=20.000000
SoundtrackMaxDelay=60.000000
MusicFadeTime=5.000000
[/Script/InteractionSystem.InteractionSettings] [/Script/InteractionSystem.InteractionSettings]
DefaultInteractionWidgetClass=/Script/UMG.WidgetBlueprintGeneratedClass'/Game/UI/InteractionUI/WBP_Eleri_Interaction.WBP_Eleri_Interaction_C' DefaultInteractionWidgetClass=/Script/UMG.WidgetBlueprintGeneratedClass'/Game/UI/InteractionUI/WBP_Eleri_Interaction.WBP_Eleri_Interaction_C'

View File

@@ -24,12 +24,16 @@ NetIndexFirstBitSegment=16
+GameplayTagList=(Tag="Dialogue.Event.Bazaar.HaggleOption2",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Bazaar.HaggleOption2",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Bazaar.HaggleOption3",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Bazaar.HaggleOption3",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Bazaar.QuickSell",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Bazaar.QuickSell",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Bye",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Merchant",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Merchant",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Merchant.Buy",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Merchant.Buy",DevComment="")
+GameplayTagList=(Tag="Dialogue.Event.Merchant.Sell",DevComment="") +GameplayTagList=(Tag="Dialogue.Event.Merchant.Sell",DevComment="")
+GameplayTagList=(Tag="GameEvents",DevComment="") +GameplayTagList=(Tag="GameEvents",DevComment="")
+GameplayTagList=(Tag="GameEvents.BazarOpen",DevComment="") +GameplayTagList=(Tag="GameEvents.BazarOpen",DevComment="")
+GameplayTagList=(Tag="GameEvents.Birthday.Yuki",DevComment="") +GameplayTagList=(Tag="GameEvents.Birthday.Yuki",DevComment="")
+GameplayTagList=(Tag="GameEvents.Character",DevComment="")
+GameplayTagList=(Tag="GameEvents.Character.Trish",DevComment="")
+GameplayTagList=(Tag="GameEvents.Character.Trish.Meet",DevComment="")
+GameplayTagList=(Tag="GameEvents.World.Time",DevComment="") +GameplayTagList=(Tag="GameEvents.World.Time",DevComment="")
+GameplayTagList=(Tag="GameEvents.World.Time.NewDay",DevComment="") +GameplayTagList=(Tag="GameEvents.World.Time.NewDay",DevComment="")
+GameplayTagList=(Tag="GameEvents.World.Weather",DevComment="") +GameplayTagList=(Tag="GameEvents.World.Weather",DevComment="")
@@ -44,6 +48,15 @@ NetIndexFirstBitSegment=16
+GameplayTagList=(Tag="Items.Crystals.Fire",DevComment="") +GameplayTagList=(Tag="Items.Crystals.Fire",DevComment="")
+GameplayTagList=(Tag="Items.Crystals.Water",DevComment="") +GameplayTagList=(Tag="Items.Crystals.Water",DevComment="")
+GameplayTagList=(Tag="Items.Gold",DevComment="") +GameplayTagList=(Tag="Items.Gold",DevComment="")
+GameplayTagList=(Tag="NpcTags",DevComment="Identity of a scheduled NPC. Every NPC carrying the same tag is driven by the same schedule asset in NpcSchedules.")
+GameplayTagList=(Tag="NpcTags.Test",DevComment="")
+GameplayTagList=(Tag="NpcTags.Trish",DevComment="")
+GameplayTagList=(Tag="Quests",DevComment="Identity of a quest. Each quest data asset is tagged with Quests.<Name>, and quests reference each other by these tags.")
+GameplayTagList=(Tag="Quests.Signals",DevComment="Signals a quest step waits on that no system in the game announces, fired from blueprint with NotifyQuestSignal.")
+GameplayTagList=(Tag="Quests.Test",DevComment="")
+GameplayTagList=(Tag="Quests.Test.1",DevComment="")
+GameplayTagList=(Tag="Quests.Trish",DevComment="")
+GameplayTagList=(Tag="Quests.Trish.WarmWelcome",DevComment="")
+GameplayTagList=(Tag="SaveGameTags",DevComment="") +GameplayTagList=(Tag="SaveGameTags",DevComment="")
+GameplayTagList=(Tag="SaveGameTags.Alchemy.TableLevel",DevComment="") +GameplayTagList=(Tag="SaveGameTags.Alchemy.TableLevel",DevComment="")
+GameplayTagList=(Tag="SaveGameTags.Bazar.Table.InventorySpace",DevComment="") +GameplayTagList=(Tag="SaveGameTags.Bazar.Table.InventorySpace",DevComment="")
@@ -53,6 +66,7 @@ NetIndexFirstBitSegment=16
+GameplayTagList=(Tag="SaveGameTags.Chest.Opened",DevComment="") +GameplayTagList=(Tag="SaveGameTags.Chest.Opened",DevComment="")
+GameplayTagList=(Tag="SaveGameTags.InteractionStage",DevComment="") +GameplayTagList=(Tag="SaveGameTags.InteractionStage",DevComment="")
+GameplayTagList=(Tag="SaveGameTags.Locked",DevComment="") +GameplayTagList=(Tag="SaveGameTags.Locked",DevComment="")
+GameplayTagList=(Tag="SaveGameTags.Rubble.Cleaned",DevComment="")
+GameplayTagList=(Tag="SetByCaller.Effects.ExpModifier",DevComment="") +GameplayTagList=(Tag="SetByCaller.Effects.ExpModifier",DevComment="")
+GameplayTagList=(Tag="Skins",DevComment="") +GameplayTagList=(Tag="Skins",DevComment="")
+GameplayTagList=(Tag="Skins.Eleri.Body",DevComment="") +GameplayTagList=(Tag="Skins.Eleri.Body",DevComment="")

View File

@@ -115,7 +115,7 @@ bEnableLegacyInputScales=True
bEnableMotionControls=True bEnableMotionControls=True
bFilterInputByPlatformUser=False bFilterInputByPlatformUser=False
bEnableInputDeviceSubsystem=True bEnableInputDeviceSubsystem=True
bShouldFlushPressedKeysOnViewportFocusLost=True bShouldFlushPressedKeysOnViewportFocusLost=False
bEnableDynamicComponentInputBinding=True bEnableDynamicComponentInputBinding=True
bAlwaysShowTouchInterface=False bAlwaysShowTouchInterface=False
bShowConsoleOnFourFingerTap=True bShowConsoleOnFourFingerTap=True

View File

@@ -0,0 +1,9 @@
[ShadowQuality@0]
r.ShadowQuality=1
[ViewDistanceQuality@0]
r.ViewDistanceScale=0.5
[ViewDistanceQuality@1]
r.ViewDistanceScale=0.65

69
Config/IOS/IOSEngine.ini Normal file
View File

@@ -0,0 +1,69 @@
; =============================================================================
; ProjectEleri - IOS platform engine config
; =============================================================================
; Layered on top of Config/DefaultEngine.ini for the IOS target platform ONLY
; (config hierarchy pattern <Project>/Config/<PLATFORM>/<PLATFORM>Engine.ini,
; see UBT ConfigHierarchy.cs and FConfigCacheIni), so nothing in this file
; changes PC / Mac / Android behaviour.
;
; Purpose: benchmarking. Unreal's IOS defaults lock the game to 30 FPS and to
; the display's vertical sync; this file removes both.
;
; NOTE: the editor's Project Settings -> Platforms -> iOS panel is evaluated on
; the *host* platform (Mac) and therefore does not read this file - it will
; still display the engine defaults ("30 FPS", "Use VSync"). The values below
; are what the packaged IOS build actually uses.
;
; To revert: delete this file (or comment out the entries below).
; =============================================================================
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
; --- the 30 FPS lock --------------------------------------------------------
; Engine default is PUFRL_30 (Engine/Config/BaseEngine.ini + IOSRuntimeSettings
; ctor). That value is consumed twice:
; * FIOSPlatformRHIFramePacer::IsEnabled() computes
; FrameInterval = GetMaxRefreshRate() / FrameRateLock = 60 / 30 = 2
; and runs its CADisplayLink at 60/2 = 30 Hz, which gates every rendered
; frame -> a hard 30 FPS ceiling on device.
; * FMetalDevice::FMetalDevice() stores it into GMetalPresentFramePacing,
; which is used by presentDrawableAfterMinimumDuration().
; PUFRL_None parses to 0, so the pacer runs at the full refresh rate instead.
FrameRateLock=PUFRL_None
; FIOSPlatformRHIFramePacer::GetMaxRefreshRate() returns a hard-coded 60 unless
; this is True; with it enabled it returns [UIScreen mainScreen]
; .maximumFramesPerSecond, i.e. the real panel rate (120Hz on ProMotion devices).
; Required to benchmark above 60 FPS.
bEnableDynamicMaxFPS=True
; Emits <key>CADisableMinimumFrameDurationOnPhone</key><true/> into the Info.plist
; generated by UEDeployIOS. Without that key iOS clamps the app to 60Hz even when
; the frame pacer is allowed to go higher. It is a build-time value: rebuild the
; IOS target with UBT so Build/IOS/UBTGenerated/Info.Template.plist is regenerated
; (it is consumed by BUILD/BuildIOS.sh when xcodebuild builds the .app).
bSupportHighRefreshRates=True
[/Script/Engine.Engine]
; --- no frame rate smoothing ------------------------------------------------
; Frame rate smoothing is the only thing that applies SmoothedFrameRateRange
; (Config/DefaultEngine.ini currently has UpperBound=200). Engine/Config/
; BaseEngine.ini already ships bSmoothFrameRate=false, so this is belt and
; braces: it keeps the IOS frame rate uncapped even if the "Smooth Frame Rate"
; project setting is ever switched on in the editor, which would otherwise
; re-introduce a ceiling behind a setting that does not look IOS specific.
bSmoothFrameRate=False
[SystemSettings]
; --- no vsync ---------------------------------------------------------------
; Unreal derives bLockToVsync from this CVar (Runtime/Engine/Private/
; UnrealClient.cpp), which on Metal becomes CAMetalLayer.displaySyncEnabled:
; with the game running fullscreen, 0 => false => presents never wait for the
; display. It also stops the IOS frame pacer from re-tuning the CADisplayLink
; interval from rhi.SyncInterval (Engine/Config/Android/AndroidEngine.ini uses
; the same key, [ConsoleVariables] r.VSync=1, for the opposite reason).
r.VSync=0
; --- no FPS cap -------------------------------------------------------------
; t.MaxFPS <= 0 means uncapped (Runtime/Engine/Private/UnrealEngine.cpp, default
; is already 0 - set explicitly so no stray value can re-introduce a cap).
t.MaxFPS=0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More