GhostVac by christina-antoinette-neofotistou
An electromechanical, ghost-sucking arcade machine of your own!

Controls:
[LEFT] / [RIGHT] Control the GhostVac
hold [Z] suction
release [Z] blow
press [Z] restart (if you're in gameover mode)
Suction a GHOST into your GhostVac and then shoot it into an open mechanical TRAP.
Trap all ghosts to win.
Software Used:
Photoshop and Illustrator for concept art and 2D textures Photoshop for the Dot Matrix Display animations Cinema 4D for 3D Construct 2 for compositing, 2D physics and fake 3D representation! BFXR and an electric vacuum used for sfx
Theme
it started out as a game where you feed a cute creature balls to keep it alive, but the gameplay wasn't where I wanted it to be, so now it's a game where you feed ghost traps to kill ghosts. I'm still happy I didn't go with my lemmings or throw wood in a fire idea.
| Youtube | https://castpixel.itch.io/ghostvac |
| Youtube | https://castpixel.itch.io/ghostvac |
| Youtube | https://castpixel.itch.io/ghostvac |
| Original URL | https://ldjam.com/events/ludum-dare/46/ghostvac |
Ratings
| Overall | 556th | 3.78⭐ | 125🧑⚖️ |
| Fun | 267th | 3.858⭐ | 125🧑⚖️ |
| Innovation | 196th | 3.915⭐ | 126🧑⚖️ |
| Theme | 2519th | 2.221⭐ | 122🧑⚖️ |
| Graphics | 267th | 4.315⭐ | 126🧑⚖️ |
| Audio | 752th | 3.462⭐ | 121🧑⚖️ |
| Humor | 848th | 3.167⭐ | 110🧑⚖️ |
| Mood | 872th | 3.579⭐ | 116🧑⚖️ |
| Given | 111🗳️ | 7🗨️ |

BUT
It's pretty fun, simple and good looking! I even beat the boss.
The arcade machine feel was a nice touch, but i found the gameplay / physics a little too frustrating for me to be honest. I think this is because i had to spend a lot of time waiting for the ghosts to get sucked in by the vacuum in my playthrough ?
Enjoyed it enough to play it twice too. Though, the second time through the time kept going even when I scored all the ghosts, not sure what happened there.
Overall one of the better games I've played this jam, but I'm not sure how it relates to the theme.
Presentation is incredibly CUTE with the little faces on the screen. And genuinely feels like an arcade machine (love that reflection, like Le Slo said!)! At least for me it's got the difficulty to boot as well—the boss was *tough*!
Loved the sounds too but unfortunately some of them were a bit too shrill for my ears to cope with, sorry about that. 😅
LOVED IT. 💜💜
(also I spent way too long figuring out 幽霊退治 👻)
I sometimes have a problem that after the first round the vac doesn't work and I'll have to restart, but it looks awesome :smile:
The tie to the theme may have got a bit lost from your original concept, but the game might have become better in return, so that's fine :) It does offer lots of potential from multiple areas, I could even imagine some kind of multiplayer game modes fitting well with this.
Congrats!!
Congrats!
The suction sound is a bit noisy which is 100% how it would be IRL.
I made it to the "boss" but didn't beat it. :tired_face: Also I ran into a bug where the Z key stops working... I clicked for focus and it still didn't work :scream:
Big arcade mood, wish I could go to an arcade and play this for real :laughing:
Top marks for innovation!
If you want to know the timestamp of when your game was played you can see it in this spreadsheet:
https://tinyurl.com/yau8hjzn
And then look in my latest videos and find your game being play (after the current stream ends)
https://www.twitch.tv/ursagames/videos
Nice Execution of the animated LED Display.
Those creature-balls are quite random & tricky to handle, especially for the BOSS-round.
Bug?: while you have a creature-ball in ghost-vac possession, after a while during BOSS-round, the ghost-traps lock-up (instead of its usual open/close cycle).
I'll acknowledge to how others have mentioned of this cross-over: Luigi's Mansion mixed with Hungry Hungry Hippos (and a dab of Pinball LED display for that Redemption Arcade game feel..) :dizzy:
Overall a really great entry!
Goes without saying that the game looks and plays fantastic, but it's just outshined by the aforementioned education potential. Phenomenal work!
# THEME
First things first, I did let the theme get lost in development. The game was initially about feeding balls to a creature via the hatches, to keep it alive. The gameplay has stayed exactly the same, you still have to feed the hatches before time runs out, but arcade games live and die on how easy they are to pick up. I thought the metaphor of busting ghosts was more apt. So the story the game tells isn't about "keeping it alive",but I'm ok with it. I prioritized gameplay over metaphor.
Re: people who ask whether I copied an existing machine: I would swear that there's nothing like this game in any amusement hall, BUT, searching through my reference folder this week, I found
[THIS](https://www.youtube.com/watch?v=Yo7mBHUHnV4)
It's a two player game where you score goals on each other using 2 blowers! It's even ghost themed, and it's obvious to me that I totally stole those flat-bottomed ghosts that are part ball and part air hockey puck!
I was obsessively researching electromechanical games a few months ago, and it obviously stuck with me subconsciously!! That said, my game is significantly more sophisticated and gameplay is very different, so no, nothing like this exists anywhere, to my knowledge.
@johnnysix @nelson-william @ruthiepee @eldogg @acronaut @joemag @turritom
# Game Design breakdown:
A sort of pinball-ish, sort of shooter-y, sort of tractor-beam type arcade physics gameplay.
I wanted to realize the fantasy of busting ghosts like Ghostbusters or Danny phantom. I felt it would be fun to make it a two step process: get the ghost, then a trap opens, then you have a limited time window to shoot your ghost in there.
Two peaks of pleasure: successfully sucking and trapping a ghost, and then managing to exterminate it by successfully aiming it into a trap.
The ghosts would have to move around a bunch, to provide a moving target.
If I had time (I did!) I wanted to implement a boss with a higher difficulty obviously, but also a slightly different mechanic: this time hatches open up and close automatically and randomly. Those same hatches that used to be ghost traps, now represent vulnerable spots of the boss.
# Suction is an illusion!
I went about implementing a "suck" behavior. Now, real-world vacuums do not suck that far! My solution was to "engineer" one blower fan that blows uniformly through 20 small holes arranged in a half circle opposite the player. Each of those holes opens via a circuit, depending on the angle of the ghost vacuum. Probably a potentiometer, or maybe even more primitive, through 20 distinct contacts on the rotating vacuum side. The effect looks like sucking ghosts, even though it's actually ghosts being blown towards the player.

The same blower fan also periodically diverts some air to blow away from the player, so that the ghosts move around on the playfield.
But the illusion of sucking doesn't stop there: When a ghost is near the vacuum, it really *does* suck it in (I emulated a suction force, by making it dependent on the inverse square of the distance - i.e. it gets weak at even tiny distances from the source).
When a ball is close enough, a sensor triggers a magnet at the tip of the vacuum, so the ghost is locked. Then, in order to shoot the ghost fast, a kicker is activated that sends it flying. Just blowing it away wouldn't be half as snappy or consistent or satisfying. So that called for more fakery.
Also to keep the balls from flying into the hatches on their own, I implemented a bump/ ridge in front of the hatches - i.e. a barrier for most balls, unless they're moving fast enough to overcome the bump.
To keep the balls from spilling out of their traps, the back half of the playfield is a platform that's angled back: I apply a small force toward the top of the playfield on any captured ball. When the game resets, the platform is raised, and the slope is enough to send the balls toward the player and out of the traps.
It looks extremely simple, but it would probably be expensive to manufacture: there are sensors for the balls going in and out (so that the game knows when to score or reset). To stay realistic and keep "costs" down I didn't implement flashing lights on the playfield or other gimmicks. Those games usually rely on cheap segmented monitors (already a Dot Matrix Display is luxury), and one core mechanical gimmick (the blower).
I think it's a fascinating field of game design, and I pride myself for thinking things through and implementing real-life mechanics.
# Known Bugs
thanks to all the feedback from players, I'm now aware of a timer bug. It doesn't always trigger, and seems to only trigger on slower systems or browsers. I did however track it down, and it's completely because of my sloppy spaghetti code: I'm not setting the enum state of the game properly. And because of that I had to use lots of if-statements, which is exactly the sort of thing the state machine design pattern is there to avoid. I'm still debugging this. In any case, don't emulate my mistakes!
@ava-skoog @fatsheep @harry-alissavakis @aeveis @despdair @bitpokit @quarter-up-studios @ithildin @adhesion @rohezal @peterfiftyfour @ethebakesmith @teammonumental @justcamh @neontropics @yellowlime @splitpainter @patsui @johnnysix @nelson-william @jonrei @ruthiepee @eldogg @alexrose @acronaut @alchemic @joemag @max-louis
# 3D is an illusion!
Then there's the fake 3D using sprites. That was a lot of work to figure out, especially since I made this in a 2D engine. The source code gives it away, you can have a look. But it's basically projection math. Dividing by Z to convert "flat world" coordinates to "projected" coordinates. Then the flat world can be used to design a playfield in 3D
2D playfield for designing and testing

3D playfield built on the 2D playfield. For displaying the game at a more immersive angle.

2D physics on the right, sprites on the left.

The one and only sprite used for the ghosts. They get Z-sorted, based on the ghosts' Y coordinate, and also scaled depending on Z.

The combined shadow and reflection sprite, that follows the ghosts around, on a separate layer (i.e. canvas) with universal 50% layer opacity:

The ghostvac plastic nozzle is a prerendered 60-frame animation. Each of those 60 frames corresponds to one of 60 degrees that the ghostvac is constrained to.

The prerendered plastic border was sliced and placed on top or behind the ghost balls, accordingly:

# Further Development
The things to add to this game are definitely: score and a survival mode-type gameplay.
Maybe a bonus mode where you freely shoot hatches. Nothing that requires more mechanical gimmicks! It's the limitations that make this kind of machine attractive to design for.
Also an operator's settings menu, including highscore reset and timer difficulty adjustments, which also double as accessibility options. Disabled players love arcade challenges too, and giving a leeway of a few extra seconds to make the game beatable by everyone is high on my list.
Thank you for playing!
# [GHOSTVAC ](https://ldjam.com/events/ludum-dare/46/ghostvac)
- the LED display - so good! The scrolling title screen, the messages when you get a ghost in, the "boss" - such a great addition.
- the reflections - they made the game board just pop so much!
- the sound effects - the vacuuming sound and the other various shunting and movement sounds were so appropriate and so well used.
The gameplay itself was also fun - lining up shots felt great, and if you missed you really felt the "just a little to the left next time" feeling. The sucking of the ghosts was a little random and felt a little unfair sometimes that the ghost would just fly away, but it's a minor nit.
I loved the two modes - the first mode felt like it was teaching you and easing you in - then the "boss" comes and ramps up the difficulty. Great stuff. I'm just sad it's so short - I want more modes, more bosses, more time playing!
The polish was great - seeing the ghosts floating around in the back instead of just disappearing was such a neat little touch.
This would have got almost perfect scores from me - the lack of connection to the theme is slightly sad, and maybe some music would have really finished the atmosphere.
In any case, really great job!
@jivers99 glad you liked it
@vernalbehemoth thank you
@skitzogamer there kind of is https://www.youtube.com/watch?v=Yo7mBHUHnV4
@colinbellino it sounds like your browser had trouble keeping up with the game. Chrome is recommended, or the downloadable version. Otherwise this sounds like a bug? Nobody has reported the ghosts being hard to capture. Thank you for playing in any case!!
@local-minimum thank you so much <3 Yes, there's a bug and it's all my fault for not following through with a State Machine, but instead adding booleans to the mix. grrr @myself
@celdur a known bug. I only found it thanks to your feedback and a few other players', so thank you!
@heyycap the boss is slightly different: in normal play, a trap opens when you catch a ghost. During the boss round, hatches open and close randomly (and faster). So you're basically trying to hurt the boss when a hatch is open and makes it vulnerable. Thank you so much for playing!
@matt-greenbury thank you for playing. I replied above with some explanation of how the 3D works in construct
@le-sio the reflections were the easiest part! Just a layer containing all the reflected objects, and the layer set to 50% opacity. Thank you so much for playing, and I agree with your feedback about music SO much. Not enough time, alas.
@kunonooni thank you for all the kind words <3
@ava-skoog thank you so much for the feedback! Sorry about your ears!!
@aeveis @g12345 a known bug that you and a few other players helped me track down!! Thank you!
@emperor-eagle thank you <3 I agree about difficulty modes, your feedback is super on-point
@adhesion good point about the playfield becoming easier. I'm ok with it, because the time is also getting tighter, but it's great to be aware of it. The lag on movement may be your system or browser. Browsers other than chrome really underperform unfortunately. Alternatively, maybe the downloadable version plays better for you. Thank you!
@rohezal thank you so much. You might like to check out Virtual Pinball X - some great pinball tables, if you're into flipper
@peterfiftyfour thank you so much. Prerendered 3D does have that advantage
@justcamh thank you so much for the feedback. I hear you about difficulty, I think I will make it repeat normal/ boss levels but in survival mode. Let you play for a high-score.
@yellowlime Construct doesn't do 3D. I posted a reply above about how it's done ^-^ The boss has a known bug, and thank you for helping me track it down <3
@splitpainter thank you so much. It sounds like you got a bug. After getting all the initial ghosts, it's supposed to go into Boss mode. After that, it's game over, and you can do it all over again.
@patsui thank you so much. I think I could get some juice when trapping ghosts too <3
@nathant thank you so much! When in game over mode, pressing Z should restart. If not, it's the damn bug. In which case, thank you for finding it <3
@jonrei thank you <3
@dps2004 I will totally implement that. Mouse drag for aiming and Z or space for shooting? Thank you for playing and the nice feedback!
@ruthiepee thank you so much for the feedback and for playing! It's true, I need to up the feedback for catching ghosts
@eldogg thanks so much <3 yeah balls can't get through the traps, that was hard to get right :D
@acronaut thank you for the kind words and the bug report, it helped me find the bug!
@alchemic fantastic feedback, and indeed what the game needs. I'm on it <3
@joemag known bug, thanks for helping me track it down <3
@eduardo-yukio thank you so much for the feedback! I'll make the back half of the table larger, so trapped balls don't block your shots!
Thanks all
Anyway, nice idea, wonderful graphics. I liked it.
I've very much enjoyed your brake down.
I think this could use some leader boards.