December '20 Update

Published January 05, 2021
Advertisement

Happy New Years! I hope everyone has had good holidays and perhaps some nice time off. I've been on vacation for two weeks already with another week to go! I'd probably have gone a little crazy with a project like this to work on.

Recap

  • Implement status effects
  • Upgrade to Unreal Engine version 4.26
  • Upgrade to project task tracking
  • Small technical debt items

Results

Status/Persistent Effects

I was really happy with how this turned out. In fact some of the ways that I've set them up I've already worked on ways to port some of those design decisions back to the version we have at work.

The Low Power effect (and I actually made a Power Surge one too) was pretty straight forward. The make an immediate modification to the amount of energy available to the ship and modify how much energy as ship has at the start of the turn for as long as the ship

The Hull Breaches turned into something much more involved because of how I wanted it as part of a built in part of damage processing. I ended up writing a really interesting bit of framework that should allow me to do add-on gameplay in a way that doesn't require modifying too much other code. Hopefully it'll make it easier to do stuff in the future. While I did get this type of effect working, it's still missing something. I think I need to add a way to transfer that information to strategy and then back to tactical so that it is a form of damage that will persist. And once it persists across those game modes, I'll need to provide some way for the player to remove it. Tasks for January.

Here you can see the Power Surge effect applied to USS Akagi and a Minor Hull Breach applied to USS Yorktown. Since the Hull Breach modifies damage from a specific direction, I added the ability to display effects on specific sides of the ship display in the lower right. I'm not sure exactly what I want long term as far as duplication between the ship display and the widget right above the ship, but we'll see how it evolves.

I implemented a solution for displaying a useful flyover/popup above the ship when things like a persistent effect is applied during combat. It's a solution that won't be used exclusively for that but this was the best reason to finally implement one.

UE 4.26

As usual this went fine. Epic makes it pretty easy to move between engines. Unfortunately I've recently encountered some issues in blueprints that seem related to the upgrade. A couple of my custom nodes and even a few nodes that are just BlueprintCallable functions don't seem to work quite the same. I shifted one of other projects back to the previous engine version (4.24) and the issues definitely weren't there. I've left some notes on UDN and AnswerHUB to hopefully restore the previous functionality locally. I'm even considering rolling back to the previous version, but there are engine changes that aren't backwards compatible. I started a change that would allow me to go back to the old engine version but a couple of the engine changes are tough to try and support in both modes. One of the downsides to using an engine, tons of things happening from outside my own control. Usually that's a benefit, but sometimes it can be mess up things you were using in a specific way.

Edit: Shortly after posting this I saw a reply to my UDN post that pointed me to a changelist Epic had already submitted for 4.26.1 that I just didn't have yet. I went ahead and incorporated that change into my engine build and issues with custom nodes and blueprint callable functions are resolved! That really takes a load off my mind!

Task Tracking

I took a look at both Hack ‘n Plan and Codecks like I mentioned in my previous update. Ultimately I choose Codecks, though Hack ’n Plan had a number of features I would have preferred but Codecks had more. One of the biggest plusses was their OpenDeck option that allows me to share my task planning easily with other people. Like you dear reader! You can check it out here! It definitely doesn't cover everything that would be needed to make the whole game but it covers the things that I feel like I may have uncovered in the “fog of war”. As I expand the scope of my game I'll probably be adding as many (or more) tasks than I finish, at least for a while.

One of my concerns was that pushing my task tracking out to an online service would be an issue. I liked having things like that local, able to work without needing that any internet connection. Ironically, shortly after getting my project setup the ISP connection in my building started having issues. It wasn't bad enough to make it impossible to use, but the timing was darkly humorous.

I think my main goal will be narrow down on how much I can actually accomplish in a month. I needed a better system for tracking and comparing so that I can figure out how much stuff I can plan to do in a coming sprint. The Codecks setup actually forces that a bit in its setup of the cards. It's probably bad luck a bit that my first sprint in the tool was a major vacation so the amount of work I did is likely much higher than normal. But at least it gives me a possible upper bound.

I also think this tool will help me be better about keeping on track with the things that I actually need to do when they come up mid-sprint and those things that are just more work, but not an immediate issue. The strategy parts of Hull Breaches were a great example of that this month. On the one hand the overall gameplay feels slightly incomplete without it, but the focus was meant to be on tactical and not really the whole game.

Technical Debt Changes

I was able to get to a few technical issues, but I don't really think that many of these are of really that interesting to discuss. But I've included my log of source control changes so if there's anything that someone would like to ask about, I'm happy to expand on things that people express an interest in.

Goals

  • A gameplay design for Strike Craft
    • From my own interests in history, tactics and military science fiction I'm particularly interested in supporting strike craft (fighters, bombers, interceptors, etc) and carriers in the player's toolbox. I really want to be careful to not make them an unbalanced weapons choice. That could be hard. I really like fighters and the tactics they can support so I'll have to fight against my own tendencies to make them the best weapon system in the game.
  • A gameplay design for missile weapons
    • I technically already have a missile weapon, but it really isn't. It's just named that way. What I really need is a missile system that is actually fired and takes multiple turns to reach it's destination. Ultimately I think they can be important counter-balance against beam weapons and strike craft. I don't want things to boil down to a strict rock-paper-scissors type balance exactly, but it might play a bit of a role.
  • Additional support for Persistent Effects
    • There's a few odds and ends that I identified as functionality I still need. Not anything that's needed for Persistent Effects to function properly, but things to support gameplay that I still need. For example, I mentioned the implementation of Hull Breaches earlier, but they still need to persist into the strategy gameplay as well as having some way to remove them (probably as part of the normal repair project).
  • A similar solution to the DataDefinition::Verify function for State Effects
    • I've really liked how the Verify function has worked out in adding data checking messages to my Data Definitions (static data). I think I'd like to add a similar solution to the State Effects type so that they can also participate in data verification. Since the State Effects are usually instanced sub-objects of Data Definitions this should extend my coverage of data validation and allow me to move various validations from runtime checks to load-time.
  • Technical and other Debt items
    • As usual, there are small issues I should address to improve either the code organization or the presentation of the game.

Changelog

  • 1188 Unity build failure. Need full type available for generated code.
  • 1189 Update project dependencies to allow for the use of Gameplay Tags.
  • 1190 Fix the Strategy HUD opening up the Research Screen. The Research Screen asset rename doesn't seem to have fixed up redirectors quite right.
  • 1191 Add a function that can get the first revision of a state object.
  • 1192 Add an game state interface version of Get Pending Result Context.
    • Tweak the archive check function to not be protected so that state objects can base their archiving on something they may be attached to.
  • 1193 Add support for event data to be included in state condition context data.
  • 1194 Add a utility to the Targetable interface that will return what event to listen for to detect the object was "killed".
  • 1195 Create a utility structure that can be used in assets for configuring events that should be checked against conditions when that event occurs.
  • 1196 Massive change building out the general framework for persistent effects:
    • Create a new definition that defines a Persistent Effect. Lasts for a duration. Applies effects when applied to a target, ticks and when removed.
    • Create an SRPG version of the Persistent Effect Definition that can handle gameplay specific things like resolving the tick rules and supporting effects that are moved on the death of the source or target.
    • Create a state object for tracking the run-time state of persistent effects.
    • Create an SRPG version of the persistent effect state for tracking game specific effect data.
    • Create an interface that state objects can derive from to provide various utility functions and tracking for the persistent effects targeting or created by the object.
    • Create a result context responsible for managing the visualization and visualization data for changes occurring in persistent effects.
    • Create a Tactical Effect that can apply a Persistent Effect to a target object.
    • Create GameplayTag ini files for persistent and tactical effect tags. Populate with a few necessary and a few speculative ones.
    • Add a new CanApply hook to State Effect. Check CanApply before applying to the Target or Source.
    • Add the TextTagResolver interface to the State Effect base type.
    • Add a tag to Tactical Effect to check against effect immunities.
    • Override the CanApplyTo function to check that tag against immunities.
    • Update Tactical Effect to check CanApply before applying to the Owner and Additional Targets.
    • Add the PersistentEffectContainer to tactical starships.
    • Implement the new Targetable interface function.
    • Add the PersistentEffectContainer to actions.
    • Update backlog. Commit to December '20 Sprint Goals.
  • 1197 Initial add of Unreal Engine 4.26
  • 1198 [[UE4 ENGINE]] Integrate engine modifications from 4.24 -> 4.26
  • 1199 [[UE4 ENGINE]] Reimport the UHT changes for ignoring the nodiscard attribute, but simplified by checking for the UE define UE_DISCARD instead of the raw [[ nodiscard ]] attribute.
  • 1200 Initial update of SRPG to 4.26.
    • Mostly replacement of [[ nodiscard ]] with UE_DISCARD.
  • 1201 Something weird from the upgrade? A soft object class parameter was messed up.
  • 1202 Remaining update to 4.26. Convert to new FProperty classes instead of using UProperty ones.
  • 1203 Update shared plugin depot with SRPG work.
  • 1204 Update RFtG plugins from Common.
  • 1205 Update RFtG to 4.26
  • 1206 Integrate CoreTech changes from Common to Underworld.
  • 1207 Update Underworld to 4.26
  • 1208 Update backlog
  • 1209 Tweak the UI layout of the ApplyPersistentEffect
  • 1210 Create conditions for checking if a target has a particular effect (or one from a possible set).
  • 1211 Tweak the parameter names to the PersistentEffect game state OnCreate function.
  • 1212 Refactor the breakdown of logic for existing effects. Avoids duplication in functionality between CanApply and FindExistingEffect but also provides a better hook for derived types to influence those two functions that overriding them completely.
  • 1213 Add an invalid option to the OrientedHexDir
  • 1214 Create a persistent effect type that can be assigned to a specific side of a hex.
  • 1215 Remove the const from UDataDefinition::Verify. Moves the const_cast to the GameInstance where Verify's being called (the call from PostLoad is already non-const). Remove individual const_casts from the places they were happening to sanitize instanced object arrays. Added more sanatized instanced object array calls.
  • 1216 Rejigger the persistent effect condition checks so that there is only 1 Has check, but it uses subconditions that are type specific to check the persistent effect against.
  • 1217 Create a tactical effect that can remove a targeted persistent effect from whatever it's attached to. Update the chain of RemoveEffect calls to return booleans for success/failure.
    • Update backlog.
  • 1218 Create a system of modifier instanced objects that can adjust the functionality of the ApplyPersistentEffect state effect.
    • Update backlog.
  • 1219 Make a few types NotBlueprintable and final to prevent any child class types from being created.
  • 1220 Replace the backlog with just a notes file. Tasking moved to codecks.io.
  • 1221 Relocate one of the border widgets so that the header and border are merged properly.
  • 1222 Add an outline to the hardpoint widget so that it reads more easily when on a boundry against a black background.
  • 1223 Refactor the way the node title is determined for the family of GetStateObject blueprint nodes.
  • 1224 Create a state object that can be used as a generic place holder on the tilemap.
  • 1225 Create console commands for applying persistent effects to a tile occupier.
  • 1226 An update to the thumbnail renderer for data definitions for 4.26. Something changed from 4.24->4.26 but didn't trip any deprecation or compilation warnings.
  • 1227 Fix the console commands for applying persistent effects so that they apply for infinite durations correctly when no duration is specified as a parameter.
  • 1228 Fix the naming of a member of the persistent effect definition.
    • Fix the EditCondition of the stacking rule so that it parses correctly. Why does that not support parentheses?
  • 1229 Create an interface for persistent effects that can allow them to modify damage computations.
  • 1230 Update the damage computation and damage assignment process of starships to take into account persistent effects that implement the Modify Damage Interface.
  • 1231 Create a persistent effect type that can modify incoming damage when it comes from a specific direction.
    • Create an effect of this type for Minor Hull Breaches.
  • 1232 Update notes with the interesting AutoCreateRefTerm + const& params discovered at work.
  • 1233 [[UE4 ENGINE]] Delete some tutorial content with blueprint errors.
  • 1234 Do some fixup on the markup and parameter types for blueprint callable functions.
  • 1235 Address some blueprint errors caused by adding the INVALID element to the OrientHexDir enumeration.
  • 1236 Add a state checking method to the finite state machine.
    • Add some missing comments.
  • 1237 Replace the collection of Visualization booleans with a finite state machine.
  • 1238 Add console commands that can be used to remove persistent effects from the currently highlighted object
  • 1239 Create a general framework for tracking difficulty and non-player campaign information
  • 1240 Call the right version of GetGameInstance so that finding the difficulty works correctly when starting up Tactical PIE.
  • 1241 Convert the VisManager over to use a state machine for tracking.
    • Break up the visualization tracking into more distinct buckets for easier state management.
  • 1242 Create a tactical turn event for the beginning of tactical.
    • Trigger it from the CreateTactical state.
  • 1243 Rejigger the damage result tracking so that it's a single array of structures instead of a bunch of parallel arrays.
    • Add information on the direction of the source of the damge.
  • 1244 Update the weapon visualization for the tweaks to the damage results structure.
  • 1245 Create a rules structure for determining the assignment of hull breaches to starships on damage.
    • Add an instance to the difficulty category.
    • Create a blueprint with the default configuration values.
    • Update the Normal difficulty with the default breaching rules.
  • 1246 Create a mechanism for instancing game states that can act as tactical gameplay subsystems.
  • 1247 Fixup the campaign state to create tactical ruleset state objects of the right subtype.
  • 1248 Add data verification to the campaign data and hull breaching rules object.
  • 1249 Use a more appropriate tag matching check so that "A.B.C" is properly matched by "A.B".
  • 1250 Pass the Effect Apply Params through to a few of the Persistent Effect virtual functions.
    • Pass the Effect Apply Params through to the OnCreate function of Effect game states.
    • Add derived types for the Effect Apply Params that allow the derived template types to push additional data through the create process.
    • Update HexSide effects to support possible data coming through from a custom Effect Apply Param type instead of requiring that the direction is determined by the relative position of the source.
  • 1251 Create additional levels of hull breaches and add them to the hull breaching rules.
  • 1252 Forgot the icon assets for the additional breaching effects.
  • 1253 Create a gameplay ruleset for hull breaches so that the effects are applied from any damage applied to the armor or structure of a starship.
    • Create a result context that can be used to visualize the application of hull breaches (even though they are applied as a part of a modify result).
  • 1254 Fix a bug with the coloring/tooltip of the "You are Here" system in the navigation screen.
  • 1255 Make a couple elements of the persistent effect definition blueprint readable.
  • 1256 Add hooks to the ship info widget for handling the application of persistent effects.
    • Add implementations to the widget blueprint.
    • Create a widget that can display a single (small icon variant) of a persistent effect.
    • Create a widget that can display a collection of the single (small icon) widgets.
    • Add that widget to the ship info widget blueprint.
  • 1257 The assigned hex of a hexside effect should be blueprint accessible.
  • 1258 Add a utility to the Targetable Interface that will return the collection of effects that have been applied to that target.
  • 1259 Make a few tweaks/improvements to the small effect widget and the small effect collection widget.
    • Add effect collection widgets to the ship display so that persistent effects are also shown on the schematic diagram for the currently selected starship.
  • 1260 Fix the hull breach result to override BuildResult but to do nothing. This result context is for visualizing previously built state, so it doesn't need to build any additional state.
  • 1261 Create a presentation interface for supporting flyovers.
  • 1262 Update the ship info presenter and widget to support flyovers.
  • 1263 Add flyovers showing the amount of damage done by the attack.
  • 1264 Add a Finish call to the placeholder visualization.
  • 1265 Temporarily remove the Abstract keyword from the GameStateObject so that it is selectable from custom node class selection pins.
  • 1266 Fix Visualization::GetResult to not be pure so that the output exec pins are actually present.
  • 1267 Fix the Hull Breach result context to actually save the breaches that were applied to the target.
  • 1268 Create an initial visualization for hull breach application.
    • Apply it as the visualization the default breaching rules use for breaches it applies.
  • 1269 Remove the AtEnd function from the data definition iterator.
  • 1270 Remove the AtEnd function from the game state iterators
  • 1271 Create a persistent effect that can modify how action points are added to a starship's pool of action points.
  • 1272 Create a tactical effect that can be used to modify the amount of action points available.
  • 1273 Fix PersistentEffectDefinition::OnApplyEffects to be properly instanced so as to be editable in the content browser.
  • 1274 Fix an ensure to properly early return on bad data.
  • 1275 Add flags to control whether or not min/max clamping is performed for mod values.
  • 1276 Create persistent effects for low power and power surge effects
  • 1277 Add some highlight types and a subtype for the tactical cursor in order to push visual presentation choices into blueprint.
    • Update rulesets and weapons to refer to the properly blueprint subtype.
  • 1278 Create a function library to function as a color atlas of common colors that are shared
  • 1279 Missed an IsValid check when colorizing the shield progress bars.
  • 1280 Expand the template functions for VisMarkers and StateObjects so that the subtype specifying versions work with more class data types.
  • 1281 Resave to clear up a blueprint compilation error when using the ColorAtlas library.
Previous Entry November '20 Update
Next Entry January 2021 Update
0 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement