User Tag List

Results 1 to 28 of 28

Thread: Arconia - Open World, SCI-FI Rogue-Like

  1. #1
    0

    Arconia - Open World, SCI-FI Rogue-Like

    Arconia
    In a nutshell: Geometry Wars meets Star Control 2.


    Intro Video


    Latest Progress
    I'm organizing this post so the latest 2 videos will always be at the top of this post.



    Visuals


    Player Ship Model


    Enemy Ship


    Player Character
    Last edited by hyperdr1ve; 09-04-2015 at 12:49 PM. Reason: Add new sketchfab
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  2. #2
    0
    Day 22.
    Added energy mechanic, world boundaries and updated the scanning mechanic. Also made some more HUD refinements.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  3. #3
    0
    very Nice. too many games now days don't seem to focus on if the game work at all, just that it looks pretty.

  4. #4
    0
    Quote Originally Posted by WeekendWarrior View Post
    very Nice. too many games now days don't seem to focus on if the game work at all, just that it looks pretty.
    I agree! I've been on the other end too though, it's easy and distracting and fun to get caught up in how things look, especially in UE4 where everything looks amazing! Once my game is fully playable I'll allow myself to indulge that end of things. For now I'd rather have a 10-minute experience for people to play than a handful of nice screenshots.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  5. #5
    0
    Day 23

    Minor fixes and code restructuring. Added cheat codes to speed up iteration times. Added passive items and created the first passive item type (Power System I). Refactored stats screen making it easier to programatically generate stat UI for each item type. Tuned weapons to make missiles a bit more fun. Also added some more variety to asteroid spawns.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  6. #6
    0
    Day 24


    Today I mostly worked on enemy AI. I added a reaction and alertness system. Enemies are now spawned with a randomized chassis size, randomized loadout and with a random accuracy value. The accuracy ranges from [0-1] where 0 shoots where you are and 1 shoots at where you are going to be.

    Looking through ways of predicting accuracy, I implemented this solution. My implementation looked like this, I use prediction in the case of firing a projectile weapon and just straight up location when firing a beam weapon. ShotAccuracy below ranges from [0-1]:
    Code:
    const FVector targetVelocity = target->PhysicsComponent->GetPhysicsLinearVelocity();
    const FVector targetLocation = target->GetActorLocation();
    const FVector gunLocation = ShipPawn->GetActorLocation();
    const float projectileSpeed = 4500.f;
    
    FVector finalProjectileAim = FVector::ZeroVector;
    FVector finalLaserAim = FVector::ZeroVector;
        
    if (ShipPawn->bAIHasProjectileWeapon)
    {
        const float a = FMath::Square(targetVelocity.X) + FMath::Square(targetVelocity.Y) - FMath::Square(projectileSpeed);
        const float b = 2.f * (targetVelocity.X * (targetLocation.X - gunLocation.X) + targetVelocity.Y * (targetLocation.Y - gunLocation.Y));
        const float c = FMath::Square(targetLocation.X - gunLocation.X) + FMath::Square(targetLocation.Y - gunLocation.Y);
        const float discriminant = FMath::Square(b) - 4.f * a * c;
        float finalT = 0;
    
        if (discriminant < 0)
        {
            // We can't hit the target in time :(, just fire for show
            finalProjectileAim = (targetLocation - gunLocation).GetSafeNormal();
        }
        else
        {
            const float t1 = (-b + FMath::Sqrt(discriminant)) / (2.f * a);
            const float t2 = (-b - FMath::Sqrt(discriminant)) / (2.f * a);
    
            // Choose the smallest positive t value
            if (t1 > 0 && t2 > 0)
            {
                finalT = FMath::Min(t1, t2);
            }
            else
            {
                finalT = FMath::Max(t1, t2);
            }
    
            const FVector finalTarget = ShotAccuracy * finalT * targetVelocity + targetLocation;
            finalProjectileAim = (finalTarget - gunLocation).GetSafeNormal();
        }
    }
        
    if (ShipPawn->bAIHasLaserWeapon)
    {
        finalLaserAim = (targetLocation - gunLocation).GetSafeNormal();
    }
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  7. #7
    0
    Day 25


    I finally added the ability to jettison modules from your ship. I try to make this un-annoying by setting a bJettisoned state and then once the ship gets an EndOverlap for the module, I set a timer that switches the flag to allow for re-picking up the module.

    I changed the way that asteroids drop loot while being attacked. They now incrementally drop loot as they get hit
    Code:
    int32 NumOfLootToDrop = (1-(health/maxhealth)) * NumLootRemaining;
    .

    I swapped out the generic drops with the actual elemental types defined in our game design document.

    I also refined delivery quests so that they can be 1:X meaning 1 pickup with multiple dropoffs. This required some reworking of the mini map to display multiple quest destination markers as well as multiple active quest selector markers. It wouldn't be too hard to extend this to allow for X:1 missions, I may do that in the future. I'm also thinking that I want to add the ability to tie in a quest item with these. So maybe you pick up X items that you have to drop off to each location or vice-versa.
    Last edited by hyperdr1ve; 06-04-2015 at 11:42 PM. Reason: format
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  8. #8
    0


    I continued my work on the mission interface in UMG. I now print out the currently selected mission, time remaining for the mission and the status of the mission goals. This alone has really started to make things feel like a game! My task list for the mission system has 2 remaining items that I'll clean up on monday before getting to the really exciting stuff!
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  9. #9
    0
    I love that "this is actually starting to feel like a game" feeling. The game looks pretty cool, keep us updated!

    ARCADE FLIGHT COMBAT GAME
    Now on Steam!

  10. #10
    0
    Supporter
    Join Date
    Mar 2014
    Posts
    9
    I like that the game is focused heavily on its core mechanics, seems it will be very fun to play
    Programmer working on Creach: The Depleted World game!

  11. #11
    0
    Quote Originally Posted by brunogruber View Post
    I love that "this is actually starting to feel like a game" feeling. The game looks pretty cool, keep us updated!
    Thanks! Yes, I love the feeling of crossing certain landmark thresholds in the development process. There will be many more

    Quote Originally Posted by Dgek View Post
    I like that the game is focused heavily on its core mechanics, seems it will be very fun to play
    Thanks for checking it out, I think it will be fun too
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  12. #12
    0


    I'm really excited to share the first set of models for this project!
    Player Ship Enemy Ship

    I spent the last 2 days basically refactoring my gamepad navigable hud system. One thing about being proficient in C++ in UE4 is knowing your base classes well. This was a case where I didn't know the HUD classes that well. I made the mistake of implementing my gamepad navigable hud using AHUD as the base class rather than UUserWidget. The end result was that I wanted to be able to spawn any number of these huds (Inventory, Mission Selection, Main Menu) and I couldn't.

    Now that this is all fixed, I can literally move on with my life. HUD is always a bit of a pain in game engines. The basic solution for my gamepad hud is a solution I've used in the past for previous engines. You store a map of game widgets that map to navigation structures.
    Code:
    TMap<UWidget*, UBaseNavigableMenuStructure*> NavigationMap;
    Where UBaseNavigableMenuStructure is a class with the 4 members:
    Code:
    // Item above you
    UPROPERTY()
    UWidget* Up;
    
    // Item below you
    UPROPERTY()
    UWidget* Down;
    
    // Item to the left of you
    UPROPERTY()
    UWidget* Left;
    
    // Item to the right of you
    UPROPERTY()
    UWidget* Right;
    Then when constructing the HUD, stuff all of your selectable widgets into the map, setting the widget that is right/left/above/below each widget. Then you track the selected item, change brush materials to indicate selected/unselected items and *poof* you're done It is a very low tech solution that has worked well in the past. If you need to store other pointers in the map for a specific menu you just override UBaseNavigableMenuStructure and make a type for the specific menu.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  13. #13
    0
    There could be a problem with a game called... Aracania. Maybe double check it :3

  14. #14
    0
    Quote Originally Posted by Kanizitas View Post
    There could be a problem with a game called... Aracania. Maybe double check it :3
    We'll be careful to distinguish ourselves going forward
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  15. #15
    0


    Today I worked on an exciting feature that allows the player to dock with a station or other object. When docked, the player hops out of the ship and runs around to perform various sundry tasks like buying, selling, upgrading the ship and exploring.

    Here's what our little Arconian pilot will look like when he's out of the ship:


    At the core, this is nothing more than unpossessing one pawn and possessing the other. The player controller manages all of this and is where the actual functions to dock/undock exist. Here is a look at one of my station blueprints. You can see that each station has 3 unique things:
    1. The parking spot for the player ship
    2. The starting location of the player pawn
    3. A camera


    When the player requests to dock, I do the following:
    1. Store the ship and camera location for undocking
    2. Unpossess the ship pawn
    3. Move the ship pawn to his parking spot
    4. Spawn/possess the player pawn
    5. Blend camera to the station blueprint's camera

    Undocking is basically the reverse
    1. UnPossess the player pawn and destroy
    2. Move the ship to the entry location stored in #1 of docking
    3. Possess ship
    4. Blend camera to ship pawn

    One issue I ran into while blending cameras using SetViewTargetWithBlend is that it couldn't handle blending to a Camera Component My work around was to spawn a helper camera actor in my player controller in BeginPlay():
    Code:
    TransitionCamera = GetWorld()->SpawnActor<ACameraActor>(ACameraActor::StaticClass());
    Then, again in my player controller, I made an override for SetViewTargetWithBlend that detects if we're blending to a space station actor and if so sets up the transition camera based on the camera contained in the blueprint.
    Code:
    void AShipPlayerController::SetViewTargetWithBlend(class AActor* NewViewTarget, float BlendTime, enum EViewTargetBlendFunction BlendFunc, float BlendExp, bool bLockOutgoing)
    {
        ASpaceStationActor* Space = Cast<ASpaceStationActor>(NewViewTarget);
        if (Space)
        {
            // It's a space station! Setup parameters on the transition camera to match the space station camera and then transition to it
            TransitionCamera->GetCameraComponent()->FieldOfView = Space->Camera->FieldOfView;
            TransitionCamera->SetActorLocation(Space->Camera->GetComponentLocation());
            TransitionCamera->SetActorRotation(Space->Camera->GetComponentRotation());
    
    
            Super::SetViewTargetWithBlend(TransitionCamera, BlendTime, BlendFunc, BlendExp, bLockOutgoing);
        }
        else
        {
            Super::SetViewTargetWithBlend(NewViewTarget, BlendTime, BlendFunc, BlendExp, bLockOutgoing);
        }
    }
    Attached Images Attached Images  
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  16. #16
    0


    Today I added the ability to travel between different systems. The tricky part was actually that I wanted to fully preserve my pawn as it traveled between levels.

    The approach that worked out for me in the end was:

    1. In Game Mode, override HandleMatchHasStarted and prevent it from calling RestartPlayer if the pawn already exists.
    2. In player controller, override GetSeamlessTravelActorList and add pawn to actor list
    3. In player controller, override NotifyWorldLoaded and fix migrated actor tick properties because some actors get their tick re-enabled as part of the rename function.


    I also moved some things from my GameState to my GameInstance since the latter doesn't get destroyed during level transition.

    When I first load into a system, I let the world generator do its thing. The next step is when exiting a system to save out the state of the actors in the system and load them the next time the system is entered. It was a long day, most of it was spent single-stepping through the Game Mode and Player Controller classes.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  17. #17
    0
    Luminary

    Join Date
    Mar 2014
    Posts
    1,977
    Well, I never played in Geometry wars or Star control, but as a roguelike player I find this project pretty interesting!
    And yeah - with your focus on core gameplay it's really cool to see how fast development goes

  18. #18
    0
    Quote Originally Posted by zeOrb View Post
    Well, I never played in Geometry wars or Star control, but as a roguelike player I find this project pretty interesting!
    And yeah - with your focus on core gameplay it's really cool to see how fast development goes
    Thanks for the comment Maybe this can be a gateway game to introduce roguelike fans to these other genres.

  19. #19
    0


    I've implemented a system that allows preserving the state of all actors in a system when traveling between systems. This uses the FObjectAndNameAsStringProxyArchive and a system described by the Fortnite devs where you do a double pass. The first pass, I loop through all my arrays, recreating each actor with the correct class, name and transform. The second pass, I serialize all of the saved actors on top of the spawned actors.

    This system works quite well, I mean my jaw literally dropped when I saw all of my pointers hook up correctly, it's really fantastic! The only place where I had to do some fidgeting is saving/restoring timers (FTimerHandle can't be a UPROPERTY). Restoring parent/child relations for actors that are attached to other actors. And finally, restructuring some actors so that BeginPlay knows whether the actor was restored via a save so that it can skip the 1-time initialization.

    Overall I think this was one of the most difficult tasks for me to complete conceptually. It took me a long time to wrap my brain around the whole 2 pass system. Now it seems as clear as a bell, but for a day there it was not clicking at all. This save system could have easily turned into a huge beast if I had given up on the proxy archive solution. I'm quite excited to have this working and out of the way!
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  20. #20
    0

    This was an asset integration week! I wrote a procedural planet generator with some cool options for spawning orbitals around the planets. I got the main player asset delivered and was able to integrate its movement system as well as the mounting system that allows you to attach your weapons and utilities to hard mount points on the ship. For the module mounting system, I finally got around to using CSV based data to define things and am excited to extend this into the other systems of the game.

    I also messed with a new enemy type and got an automated build system setup. It was quite a shock to have my game fall apart completely when packaging :0 Initialization of actors happens in a completely different order in editor vs out of editor. So some refactoring to make all that work out.... that's why it's always a good idea to get your builds going ASAP to work those minor issues out.

    Overall a very busy week, it's honestly hard to remember what all was done!
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  21. #21
    0
    Jake has uploaded a video detailing what he has done for the creation of the models, materials and other graphical assets. Check it out!
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  22. #22
    0


    This was a busy period. Most of my time was spent writing the buy/sell HUD system. The HUD in this game (and every game I've ever made) is fairly challenging but it has nothing to do with how good or bad UMG is. In retrospect I could have made things much easier on myself if instead of trying to use structs in many places, I just used classes. There are places where I get my CSV data using FTableRowBase and I store this struct of menu data that might describe a weapon or a passive module... and they all have different structs... So if I had used classes I could have used C++ Templates to clean some functions up.

    I also took a day off to write a Google Sheets plugin that helps make CSV data easier to read when you're referencing blueprints and other assets. I'm not planning on releasing this plugin but if you're interested let me know, I show it in the video towards the end.

    Finally I started playing with matinee to create transitions into the space stations where you buy and sell. You can now run around outside of the ship when you're on a space station, I'm using spline based movement to accomplish this since our stations can be oriented at any angle.
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  23. #23
    0
    We've been hard at work. Here are some new model updates.

    The player character has been replaced by Rob-1E. Rob-1E uses a scene capture component to project his face, so it's not visible in sketchfab.



    A look at one of the hero planets for System 6.


    Some remnants of an old civilization
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  24. #24
    0

    Art update


    Stargate


    Catwalk with platform


    Video of catwalk and stargate in UE4


    Stonehenge to space speed model


    Easter Island Statue


    Destroyed moon and new star background painted


    Ship design tweaked and re textured



    Finally the destroyed moon, easter island, stonehenge, star background video




    These are the basics of what iv'e had time to get to sketchfab, and take some video of. My full list of what iv'e done since the last update is allot larger than this. All 7 systems have had their skeletons finished, that means hero planets all their asteroids, and skyboxes, all the basics. Now i'm on a 2nd pass starting on system 1 tweaking and refining. once I get through the third pass the art will be finished for Arconia!

  25. #25
    0
    We are still working on this game daily, just finished up another model! This is our projector bot that will project our menu.


  26. #26
    0
    We recently needed to print out some photo references for Rob for a cool event here in Portland called Drink 'n Draw. Long story short, we setup some renders in UE4 and were just so thrilled with the results that I thought I'd share them here. We just used the high-res screenshot tool at about 3X. I'd probably go back and revisit the anti-aliasing settings in the future.

    Attached Images Attached Images      
    Dev Blog http://www.error454.com
    Arconia: Twinstick Shooter Adventure

  27. #27
    0
    Some more model updates below:

    Ship the player will enter



    Airlock player enters



    menu robot, displays our hud



    New mining station



    New enemy


  28. #28

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •