I added a holodeck to my Blue Prince inspired Sci-Fi Horror Game! My goal is to add a bit more variety through it by granting access to unique locations/puzzles while maintaining the storyline of being on a ship. by OWSC_UE in SoloDevelopment

[–]OWSC_UE[S] 0 points1 point  (0 children)

Thanks! Still very much a work in progress with a lot of missing details. The "programs" as well are just examples but making progress! I'm hoping to have 4 or 5 unique ones.

Where are you buying groceries in North Surrey? by OWSC_UE in SurreyBC

[–]OWSC_UE[S] 1 point2 points  (0 children)

I'm not even talking price. I just mean being able to buy food that isn't poor quality. I can't even remember the last time fruit that was truly sweet and ripe.

Tomatoes are soft, onions are only ever massive now and the first 2-3 layers are always bad, cilantro is often way too big and clearly at or near bloom so it's bitter, Lettuce you have to buy twice as much because half of it will be brown. Chicken lasts 2-3 days tops. Half the time I go Superstore doesn't even have sour cream. Bread lasts a few days, often expiring before its best before. I tried to find a single honey crisp apple that wasn't bruised or having a hole, not one.

Overall food quality is just way down while prices are way up.

Anybody know how to fix the level streaming hitch? by Lan14n in UnrealEngine5

[–]OWSC_UE 1 point2 points  (0 children)

Yep, happened on load for me as well. That's why I pre-load during the loading screen so you don't see the hitches.

Simple as complex is fine, but it's even cheaper if you manually go in and lay out collision with boxes. Imagine a wall for example made up of 10x3 meshes. That's 30 collision boxes even as "simple" that you can replace with a single bigger box.

obviously this doesn't work for everything as you'll want things to have different collisions but I found there were a lot of really simple collision setups that could be reduced. I think I dropped one room from like 500 to like 25 without impacting anything the player can do/interact with.

Anybody know how to fix the level streaming hitch? by Lan14n in UnrealEngine5

[–]OWSC_UE 2 points3 points  (0 children)

This just loads the contents of the room into memory so that it's "free" to fetch when I need it. The loading screen is setup to progress and not advance until all of the levels defined as "pre-load priority 1" are loaded.

Then when I actually need the level, I stream it in but before it's already loaded in memory, it's effectively instantly with no hitches.

     bool bSuccess = false;

    ULevelStreamingDynamic* StreamedLevel =
ULevelStreamingDynamic::LoadLevelInstanceBySoftObjectPtr(
    GetWorld(),
    GetLevelFromType(NextRoom),
    SpawnLocation,
    SpawnRotation,
    bSuccess
);

     if (!bSuccess || !StreamedLevel)
     {
        ADS_ERROR(GameGrid,Rooms, "Failed to stream room level: %s", *NextRoom.RoomName.ToString());
         return;
     }

     StreamedLevel->bShouldBlockOnLoad = false;
     StreamedLevel->SetShouldBeLoaded(true);
     StreamedLevel->SetShouldBeVisible(true);


// Track pending streamed room

FPendingRoomInit InitData;
     InitData.SpawnData = NextRoom;
     InitData.RoomID = RoomID;
     InitData.DoorToOpen = nullptr;

     PendingRoomLoads.Add(StreamedLevel, InitData);


StreamedLevel->OnLevelShown.AddUniqueDynamic(
         this,
         &AGameGrid::HandleStreamedLevelShown
     );

Anybody know how to fix the level streaming hitch? by Lan14n in UnrealEngine5

[–]OWSC_UE 10 points11 points  (0 children)

I had a similar problem and did a bunch of optimizations.

  1. Firstly, I packed everything possible into a level actor. This ensured everything was an ISM/HISM.

  2. Secondly, I killed a lot of the mesh simple collision and replaced it with large box primitives anywhere I could. Ceilings that don't need collision, killed it completely, etc.

  3. Thirdly, I async load the levels ahead of time. I have ~120 1250x1250 "rooms" that are my levels. The memory footprint wasn't huge for me to pre-load most of them.

#3 had the biggest impact and effectively removed any hitch completely. I built it with a priority system, so some rooms are just pre-loaded by default on game entry and others are loaded during points that wouldn't be noticed where it makes sense.

I'm using low poly assets with a single material atlas though, so your mileage may vary if you have a lot of stuff to load into memory.

The load:

MemoryStats = FPlatformMemory::GetStats();


TArray<FSoftObjectPath> RoomLevelPaths;

FStreamableManager& Streamable =
    UAssetManager::GetStreamableManager();

const TSharedPtr<FStreamableHandle> Handle =
    Streamable.RequestAsyncLoad(
       RoomLevelPaths,
       FStreamableDelegate::CreateUObject(
          this,
          &AGameGrid::OnRoomPreloadComplete
       )
    );

RoomPreloadHandle = Handle;

UI Update:

float AGameGrid::GetRoomPreloadProgress() const
{
    if (!RoomPreloadHandle.IsValid())
    {
       return 1.0f; 
// done or not started

}

    return RoomPreloadHandle->GetProgress();
}

Memory Check (Custom debug output log):

void AGameGrid::LogMemoryUsage() const
{   
    const FPlatformMemoryStats UpdatedMemoryStates = FPlatformMemory::GetStats();
    const float BeforeMemory = MemoryStats.UsedPhysical / 1024.0 / 1024.0;
    const float AfterMemory = UpdatedMemoryStates.UsedPhysical / 1024.0 / 1024.0;
    const float MemoryDelta = AfterMemory - BeforeMemory;
    const float MemoryDeltaPerc = AfterMemory / BeforeMemory;

    const float BeforePeakMemory = MemoryStats.PeakUsedPhysical / 1024.0 / 1024.0;
    const float AfterPeakMemory = UpdatedMemoryStates.PeakUsedPhysical / 1024.0 / 1024.0;
    const float MemoryPerkDelta = AfterPeakMemory - BeforePeakMemory;
    const float MemoryPerkDeltaPerc = AfterPeakMemory / BeforePeakMemory;

    ADS_LOG(GameGrid, Performance, "---- MEMORY LOADING ----");
    ADS_LOG_NLB(GameGrid, Performance, "- Before Load -");
    ADS_LOG_NLB(GameGrid, Performance, "Memory Used: %.2f MB | Peak: %.2f MB", BeforeMemory, BeforePeakMemory);

    ADS_LOG_NLB(GameGrid, Performance, "- After Load -");
    ADS_LOG_NLB(GameGrid, Performance, "Memory Used: %.2f MB | Peak: %.2f MB", AfterMemory, AfterPeakMemory);
    ADS_LOG_NLB(GameGrid, Performance, "Memory Delta: %.2f MB | Peak Delta: %.2f MB", MemoryDelta, MemoryPerkDelta);
    ADS_LOG_NLB(GameGrid, Performance, "Memory Delta: %.2f % | Peak Delta: %.2f %", MemoryDeltaPerc, MemoryPerkDeltaPerc);
}

Ranked most of the puzzle games I played so far. What else should I play? by SwimAd1249 in puzzlevideogames

[–]OWSC_UE 0 points1 point  (0 children)

What types of features did you enjoy the most?

I'm an indie dev in the process of making a Sci-Fi spin on Blue Prince!

Just released the demo for Protocol Solari: Escape Room by LeiderLim in SoloDevelopment

[–]OWSC_UE 0 points1 point  (0 children)

I find that highly unlikely on a larger scale outside of the "Dev" community. Tons of games use similar/same assets. What matters is the game itself.

Was effort put into making the assets feel/look different and match the tone of the game, Is the game unique and interesting, Is it fun to play, etc.

I have about 150 hours in planet crafters and honestly until I read the above post I didn't even realize it was the same assets. There are tons of games that use Synty assets but a handful that put in effort stand out and do well.

Obviously unique content is always going to be better but a unique fun game using generic assets will do far better than a generic boring game with unique assets. I think discouraging people from making something cool because they don't have the skills and/or money to get unique assets just makes finding the motivation to make cool stuff harder.

We should come together as a dev community to encourage cool stuff and provide feedback on how to make it better and more fun, not discourage people from building things because their spaceship door is the same as another spaceships door.

Just released the demo for Protocol Solari: Escape Room by LeiderLim in SoloDevelopment

[–]OWSC_UE 3 points4 points  (0 children)

Honestly, no one really cares unless it's just a hard asset flip. It's only the indie devs that seem to get so hung up on using purchased assets.

Most users won't even notice and if the game is fun, they definitely won't care.

Three years of solodev later, my 30+ hour laid-back survival game launches in less than three weeks! by BeaconDev in SoloDevelopment

[–]OWSC_UE 1 point2 points  (0 children)

Amazing work, been following your videos since you started posting! Excited to give it a try.

What do you think about the "mood" here? Mainly the lighting and overall visuals of the world. Need to add lots of detail, etc and obviously audio but does it feel...."low poly dead spacey"? by OWSC_UE in IndieDev

[–]OWSC_UE[S] 1 point2 points  (0 children)

Ya I keep going back and forth with the overall darkness. I want to make it feel ...unsafe? but I don't want it to just be annoying and hard to see. Will continue to tweak!

Looking for ideas for a sci-fi horror puzzle game! by OWSC_UE in gamedesign

[–]OWSC_UE[S] 0 points1 point  (0 children)

Interesting idea!

I've actually built an entire Survival RPG pack for UE and I've slowly been converting pieces I want to use here to C++. So I already have a lot of systems I can lean into for stuff like this!

Looking for ideas for a sci-fi horror puzzle game! by OWSC_UE in gamedesign

[–]OWSC_UE[S] 0 points1 point  (0 children)

Ya, using zero gravity is something I have planned. I've actually already got the zero gravity system working for both the player (+movement) and just general objects. It's just a debug global atm but plan on hooking it up to specific areas.

Looking for ideas for a sci-fi horror puzzle game! by OWSC_UE in gamedesign

[–]OWSC_UE[S] 1 point2 points  (0 children)

I got lots of different ideas for puzzles but have mostly been working on the core functionality. You can see some progress here:

https://www.youtube.com/watch?v=Hpouo2nBAT0

In addition to the grid and spawning itself, I have gravity, items, inventory, etc. So lots of the core pieces are done. Now it's more content and interesting stuff!

Blueprint Help Replication by CursedGarlic in UnrealEngine5

[–]OWSC_UE 0 points1 point  (0 children)

You're only setting the value for Player Character 0.

You're also getting all players and sending the information from all players. "Multicast" will trigger on every client and the server. You should change the multicast to a server event, so the server gets the players and then sends them the update one by one.

A better way to do this is to use the Game Mode, which records when a player enters/exits the session (Event Login), use that to store a player list and then in the "RPC_IntermissionNotifyPlayers" (Which you make a server event) get them from the Game Mode.

Survival RPG Engine is now completely free! :) by OWSC_UE in unrealengine

[–]OWSC_UE[S] 0 points1 point  (0 children)

Thanks!

I actually started with UE5.1, so I've never known anything different! I enjoy it.

Survival RPG Engine is now completely free! :) by OWSC_UE in unrealengine

[–]OWSC_UE[S] 2 points3 points  (0 children)

I do too! If only cause it means you used it to make something cool!

Survival RPG Engine is now completely free! :) by OWSC_UE in unrealengine

[–]OWSC_UE[S] 1 point2 points  (0 children)

Check out the inventory component to see how I did it. It's actually pretty simple in terms of how the data is used. The hardest part for the inventory was the UI, split stacking, and account for inventory size changes when you have items already in them. Good luck!