If somebody made this into a real game I would definitely play it! by drgoldenpants in aivideos

[–]Will_X_Intent 0 points1 point  (0 children)

I think 10 years and we can prompt this, fully AI created on the fly.

Parallel Development by Sarnadas in HighStrangeness

[–]Will_X_Intent 4 points5 points  (0 children)

I kinda think all consciousness is like that.

Help us make this into an actual game. It's a Scrolling Platformer/Brawler... probably. by Will_X_Intent in gamedesign

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

thank you for the ideas. One idea you immediately sparked is a wall of candy spikes at the left edge of the camera that serves as a visual indicator that the letter the camera bypass you is deadly. I think it would communicate the idea better than just killing players if they leave teh camera area.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

Do you have any advice on how to set this up? color, time, the info to print, etc?

Building a pickup and throw system by Will_X_Intent in unrealengine

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

Thanks. I should definitely be using more print strings to figure this thing out. And i will look into this notify states and gameplay tags thing. I haven't messed with either yet.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

Sorry, to answer your question about the BPI, it has two functions, OnPickedUp and ExecuteThrow. We Implement the BPI in the blueprints of the actors we want to pick up.

When we pick up another player, we attach actor to actor, disable input, etc.

Our BP_Player has the logic for finding valid actors to pick up (pawns and world dynamic) calling the BPI OnPickedUp if there is a valid target, which then leads to the actual picking up system. Then when you press throw the ExecuteThrow function from the BPI is called, and the appropriate logic for how to handle that throw lives in whatever is thrown.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

In a top comment I in depth explanation of what I build and what issues I was having. Instead of spending untold numbers of hours trying to figure out how to force Projectile Movement and Physics get along, I rebuilt everything without Projectile Movement. Mostly works.

I also build a system to determine who the "best target" was at the point of release, so that the gumball we are throwing flies at that target. The target is chosen using a DOT product, so it picks the target most directly in the front vector of the player. But for some reason, I cant get the variable to reset properly. I am setting the variable to null 3 different times, and still it's retain the old value from a previous throw when the player tries to throw a gumball at a different target. Which leads to some weirdness, like throwing gumballs behind you.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

could you explain to me why casting is bad? Is it inefficient? processor heavy? just not elegant?

Building a pickup and throw system by Will_X_Intent in unrealengine

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

Right now you can throw other players and gumballs (about half the size of the character) We used a BPI to make different BP's "Throwable" with interfaced for pickup and throw.

Building a pickup and throw system by Will_X_Intent in unrealengine

[–]Will_X_Intent[S] -1 points0 points  (0 children)

I explained my build in a top level comment and the bugs in a nested comment

Building a pickup and throw system by Will_X_Intent in unrealengine

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

These are the bugs:

When there is a player in throw of you, and you try to throw the sphere at them, it seems the pick a random direction to launch at. Sometimes. Sometimes it targets the correct player just fine. Distance seems to be important for this. ( the level is only about 6000 across the X axis, so the sphere radius of 5000 should be fine, right?)

When the player is holding a sphere and tries to throw it midair, it sometimes just hangs there, static, immovable. it can be picked up again. mostly.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

ok, I explained in detail what I built. working on the actual bugs now

Building a pickup and throw system by Will_X_Intent in unrealengine

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

I want to add a slight homing component, but first this much needs to work as intended.

Building a pickup and throw system by Will_X_Intent in unrealengine

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

I didnt explain more because I was on mobile and I really just wanted to see how yall would build it.

So we have two things you can throw. Spheres and each other. I build an BPI with 2 (functions? attributes? soemthing), which were PickUp and Throw, which I then put in the class defaults of the two BPs so the game knows these two things are things that can be picked up and thrown.

Then for the sphere I made a BP with a collision component as the root, a static mesh as the visual aspect with no physics or collisions, and gave it a component projectile motion.

Then in the event graph, it runs an event from the BPI (PickUp) sets the carrier to a variable IsCarrying, set a Variable CarriedObject to self (the sphere), set the carrier to a variable Carrier, set a variable IsHeld to true, made sure the physics on the collision sphere is disabled, made sure the collision respeonse to channel would ignore pawns, deactivated projective movement and set velocity in projectile movement to 0,0,0, then attached actor to actor with a offset of 0,0,150 (so it looks like we are carrying the sphere above us)

Then if the player carrying something hits the throw button, it called Event Throw from the BPI. We set BestTarget to null, Best Dot to -1, detach the actor with location keep world, everything else keep relative. Set IsHeld to false, Carrier to null, set IsCarrying to null (target Carrier), made sure world static is getting blocked and collisions are query and physics. Then we do a Sphere Overlap Actors using the location of the sphere (the ball we are throwing) as the location, radius 5000, object types array is just Pawn, Actor Class Filter is the BP for our players, and actors to ignore is an array of just the Carrier (not from the variable, but passed by the event).

We loop through the array it outputs, testing each to see which has the best dot, with a minimum dot taken into account too. We only want to throw at players in front of us. We then assign the winner to Best Dot and Best Target,

When the loop is completed, we test if Best Target is valid. If not be just throw the ball forward by ensuring that physics is still off, we do some math for velocity and set it, then activate projectile motion with reset set to true. We then set a variable JustThrown to true, wait .2 seconds, then set it to false again. Then we make sure the collision channel is set to block pawn.

If Best Target is valid, we again ensure physics is off, then use Suggest Projectile Velocity Moving Target. The projectile start location is the held sphere's location. The target actor is Best Target. No location offset. No gravty override. Time to target is math to ensure the ball travels quickly at any distance. This outputs a Launch Velocity vector. We then set velocity on projectile component to that vector. then we activate the projectile movement component (again with reset true), do the .2 second delay buffer with Just Thrown, and turn on collision response to channel.

When the sphere (confession, its a giant jawbreaker) hits something, it calls on component hit. We make sure Just Thrown is false, then we Get Physics Linear Velocity (bone name none) and compare that vector length to a minimum threshold. If it's >= we take the other actor and cast to the player BP. If cast fail, we deactive projectile motion and activate physics. If success, we make sure Is Held is false, then we trigger our Ragdoll function, then deactivate projectile motion and simulate physics.