Stinkhorse's Combat/Visual Style Prototype

I’m in the early days of a 2D combat prototype I’ve been thinking about for a while now. It’s envision as a combination of Zelda2’s active blocking combined with Punch Out’s patterned enemies, and a dash of Dark Soul’s stamina management on top.

I’ve got a particular visual style in mind that would lean heavily on either post processing or transparency to create a sense of depth and tone with a static background visual.

I’ve got significant limitations in terms of what I can produce myself as I’m not capable of (or enjoy) 3D modeling, but I can draw. More importantly I can lean on my weaknesses and hopefully turn them into strengths by designing the system and visuals around them.

I’ll be keeping this top level post updated with my current progress position and updating the posts below with questions and specifics.


-Set up a character independent camera - SOLVED
-Move camera based on character position past a certain range (rubber band)
-Zoom camera based on distance between characters
-Override camera to highlight an object or event (ZOOM!) then return to it’s base state

-Guard Break
-Corner Death

-Create a character independent of the camera - SOLVED
-Lock the Debtor to a plane - SOLVED
-Define points the Debtor can move between, stopping them at the far right and left - SOLVED
-Transition the Debtor between points instead of teleport - SOLVED
-Lock Debtor input during a move
-Allow certain actions to interrupt a move
-Debtor Combat:
—Build three attack heights
—Build three block heights
—Build a forward and backward dodge
-Prevent Debtor movement through That Jerk without a dodge
-Prevent Debtor dodging through That Jerk without the Jerk being in a special stun state

-Add a colossal jerk to the environment
—Figure out how to add a colossal jerk to the environment
-Produce a Temp Jerk to work with the camera rubber banding

-Lock a material’s scale/position relative to the camera view - MAYBE SOLVED?
-Rebuild and reimport the art assets on power of 2 scales so they display correctly
-Learn how to reference portions of a texture sheet to make the best use of a power of 2 texture
-Define a depth scale to affect:
—An object’s base transparency
—An objects position in space
—To build fake lighting in 2D
-Build a particle system with a randomized flicker
—Reference the particle system’s position and flicker and tie that to another object’s current transparency to boost the false sensation of space

I started the process of getting the camera capable of looking at people tonight. I made it a class and got some things to look at in the scene. I built a low-rent, evil version of the Debtor and plunked him in the scene as another new class. It’s currently leering at the Debtor from way over on tile 5.

My current thought is to leave the tiles out it the equation entirely, and just make references to the Debtor and his twin for the camera to look at. I’m figuring it’s going to be a tween event where the camera averages the distance between the two, but it’s late and I’m having difficulty thinking through how I’m going to do this. Tomorrow I’ll be spending time with a friend so I doubt I’ll be able to spent much time on this until Tuesday.

Despite rocking the block off Bloodborne with a friend today I decided to get a late night start on the Debtor/Enemy position averaging camera tonight, and while I feel like the general math should fly, I won’t know until I can get something to tell me why it doesn’t like the camera. The first problem was making sure the reference variables were updated to actually link to their respective actors after the blueprint was compiled. That was an easy enough solve thanks to some feedback from iTween that it was being fed gobbledygook.

The next problem is that the game grumps out two error messages about not having anything in the construction script section of the blueprint. Specifically: “Error Accessed None ‘Room Cam Ref’ from node Construction Script in blueprint RoomCam”. I’ve never seen that happen before so I’m not super sure what it wants. It’s damned late, so it took typing that message in this post to remind myself that Google is a thing, so let me look into that, be right back… Nope. Nothing concrete.

I’ve tried a handful of potential fixes and checked that I’ve got everything plugged in correctly. I have the camera and all the characters referenced as variables in the camera’s blueprint, and I have all the necessary variables that compare and contrast the averages of the objects in the scene in various ways to get both origin and destination variables to call. I even handle an OR flow condition to check if the camera is greater or less than the average position between the Debtor/Enemy. It almost seems like it would be something stupid, like the camera isn’t set to movable, but I went digging for that option and couldn’t find it anywhere, so I think they’re movable by default?

I’ve a feeling I’ll be banging my head against this one between bouts of chores tomorrow. Maybe something to do with updating the camera’s current position variable before the move is called…

So here’s what I’ve managed to put together for the camera so far:

The Setup
The goal is to get the RoomCam to move to a averaged point between the Debtor and his opponent, so that means I need references to all three of those items, their positions, and check to see if the characters have moved from their previous position relative to one another. If they have the camera needs to update that information, check the state of the actor array for the average distance, and then move to the new position between them. It’s currently not going anywhere.

Hmm, looking at it now in the light of day I can see I’m never really establishing what the RoomCam Distance From Actors actually means to start. How would I do that… Hmm. I think o could take the Get Distance Between two vectors to set the variable straight off. Then after that I could do the relative position check with the branch to everything that comes after.

Yeah I think I’ll start there, though if anyone sees anything I don’t please let me know. I have a Tick event to continually check for a reason to re-position the camera, but I’ll wait to see if this has any effect before I muck about with it.

Nope that didnt do it… Whelp back to the drawing board.

Had a fun couple of days but just as it’s back to work by day, it’s back to work at night. Realized something pretty obvious tonight, something people always talked about back in the industry: build in stages.

It’s so easy to race ahead and try to assemble everything at once. The danger in that lies at the end of the Sprint when you run it, it fails to work and you’re left to pull it apart piece by piece, debugging each step of it. The lesson has been taught, and it’s understood, but knowledge isn’t wisdom without the catalyst of experience. I’m gonna screw up more than a few times and I’d better get comfortable with that.

After a rebuild and some debug strings I’m pretty sure the camera is pulling info on the debtor, so that leaves only two options:

  1. The camera has a mobility toggle I don’t know about
  2. The camera needs a movable object to parent to via a swing arm
    The first presents an insurmountable obstacle without someone pointing me in a direction. The second will takes some study but is doable.

I’ve got a post up on the UE4 blueprint board, we’ll see if anyone bites. In the meantime I’ll look into the parent/arm solution by Friday.

I finally had a free moment this evening and I did some work trying to figure out the camera. Still no progress to report unfortunatly, that **** thing just refuses to move.

I had a suggestion I followed from Shigan5, involving a curve/timeline/lerp set up, but that had about as much success as the last time I set one of those up. Tomorrow I’ll try that parenting idea and see what happens.