Skip to content

AJChurchJr/Yup-Rev5

Repository files navigation

WELCOME TO YUP-REV5

  • Yup was a game I spent years and years working on. It went through several code reworks and art style changes.
  • I'd given up on it sometime in 2023, but I came back to it after graduating because I felt bad.
  • A nice game engine I'd created was sitting right in front of me, and I didn't make a finished project with it.
  • This revision wasn't to remake anything, but to finish the game with the tools I had.
  • I made it simpler, removed a lot of the extra junk that was there, and fleshed it out.
  • I am proud of what I created, and the people I showed it to had genuine fun playing it and came back multiple times.

NOTE - this is going to go from top to bottom, not bottom to top

11/19/24 WEEK 1, WHAT WAS COMPLETED.

  • OKAY so this game was way too polished for me to drop
  • But I'm noticing there was a lot more, or moreso less I could have done.
  • For one, the main character assets should not change as that makes the game cluttered and confusing
  • There should only be one bullet asset
  • There shouldn't be worlds, only randomly generated levels that slowly get more chaotic as time goes on.

WHAT TO DO

  • Remove the "skins" and make the enemies only have one basic skin
    • Enemy A: Nope A
    • Enemy B: Nope B
    • Enemy C: Nope C
    • Surf-Guy: clone of Enemy A
    • Yippee: Special
    • Sandwich: Special
    • Computer: Special
    • Laser-Eye: Special
    • Jellyfish: Special
  • Remove the tutorial
    • There will be less clutter, so they'll learn the complicated stuff themselves
  • Remove the end results
  • Remove the demo code from Play State, and remove uses of it from the Title Screen
    • It's extra bloat that isn't needed, and if it is it could be an inhereted class, not integrated
  • Simplify the Game Over, and title screen
  • Remove the changing bullets (they can change, but they're not supposed to normally)
  • Make a new campaign/world just called "arcade"
    • There is only one enemy
    • New enemies get added every 5 levels
    • Each new enemy class has a randomly-assigned formation pattern that does not change for the entire game
      • this pulls from a random list of all the start patterns
  • World BG/FG will change every 5 levels
  • Special events that do graphical changes for the funsies
  • Sounds.
  • A shop that sells upgrades
    • Triple Shot
    • Homing Missile
    • Extra damage

I will have one week to do this (Tue 19th to Tue 26th)

WEEK 2

  • Okay so I did get a lot done
    1. Enemies are gradually unlocked as time goes on
    2. The backgrounds and such change as time goes on as well
    3. There is now a shop, and a buttload of upgrades you can use your points to purchase
    4. A lot of the previous code is now unused, and needs to be replaced.
  • So now I am going to be extending this period by another week, because college keeps getting in the way of what I want to do.
    1. Difficulty scaling properly
      • Enemy attack speed goes up GREATLY during the first 10 or so levels, and then slows down to be more gradual afterwards
      • For each difficulty level an enemy class passes, they gain 1 health. Newly introduced enemies always have 1 health.
        • Probably add healthbars to this?
    2. Bosses
      • This will probably just be one boss with slight changes.
      • For each world ("difficulty level") you've gone through, the boss becomes more powerful
        • extra attack
        • more health
        • different idle state
      • Note that the formation handles bosses as just another enemy in the formation.
        • It checks if the enemy dies, and then updates for a new formation
    3. OPTIMIZE WHAT WAS ALREADY THERE
      1. Adding the GameOver/highscore state back.
        • The old one was too complicated and convoluted.
        • It just flashes the game over screen, and if you got a high score it prompts you to type your name.
      2. Optimize the title screen
        • I made emblems.
        • Emblems should be used, not some crappy dictionary thing.
        • Not gonna lie it looks bad but thats intentional
      3. FIX THE UI BORDER
        • THIS ONE IS ALSO LAME
        • IT SHOULD JUST BE PASSED THE PLAYER CLASS AND DRAW IMAGES AND MAKE EMBLEMS
        • Change the images too
        • actually this is just going to become a menu sprite like the other ones
      4. Re-add the advance state back, just as a transition so you know more things are going to be added
      5. Add a graphic that plays at the start of each level, just a little thing that says "LEVEL x" or "BOSS LEVEL"

WEEK 3

  • OKAY so college is getting in the way way too much
  • 2 entire days I could have been working on this game were dedicated to studying for finals
  • I have a new checklist
    1. CHANGE THE FLOOR ASSET
      • There is no longer a floor, just a platform under you that follows you, so you're technically on a ship in space
      • This stays at the bottom of the player.bar[1] position, and follows your rect.centerx value to seem like it's always catching you
    2. UPDATE THE WAY THAT MENU ASSETS BEHAVE
      • All of the menu assets behave the same, so I can just iterate through what gets drawn by a list
        • So reference all the menu assets in a dictionary and iterate [for x in x, if x.active then draw and do inputs]
      • make it so playstate has an "activate queue" so multiple items aren't activated simultaneously
        • playstate.activate_queue = {}
        • playstate.activate("gameplay")
        • then it repeatedly checks to see if said item de-activates, and then activates the next (after .popping)
      • give the menu assets a parent class since a lot of them inherit the same values
      • [NEVERMIND] give menu assets a .visible bool value, so multiple items can be drawn to the screen at the same time
    3. ADD BOSSES
      • check bosses.py for pseudocode

WEEK 4

  • College is over. I can work on bosses properly now.
  • Bosses have been added.
  • Making the title screen into a menu so multiple things can be added and worked with.

LAST WEEK

  • This ends Tuesday.
  • Condense the code down, specifically what's in Menu
  • Redo ALL sound effects
    • Shoot
    • Jump
    • Land
    • Crouch
    • Uncrouch
    • Hurt (done)
    • Death (done)
    • Switch Weapon (done)
    • Enemy A bounce
    • Enemy B jump
    • Enemy * Shoot
    • Enemy Computer Shoot
    • Enemy Jellyfish Zap
    • Enemy Sammich Swoosh
    • Enemy Yippee... Yippee.
    • Enemy Yippee Death
    • Enemy Lumen Laser
    • Menu Select
    • Menu Confirm
    • Menu Back
    • Menu Denied (done)
    • Shop Buy (done)
    • Shop Denied (done)
    • Boss Explosion
    • Boss Shoot
    • Boss Shot Woosh Sound
    • Boss Birthing Noise
  • Make the Lumen laser look less bad
  • Finish the HighScore Menu
  • Finish the About Menu

DOCUMENTING WHAT I'VE BEEN DOING

ENEMY/BG UNLOCKING

  • World data no longer exists
  • The gameplay assets only have lists of unlocked enemies/BGs/start patterns
  • This is handled through a class filled with static methods known as Info

MENU ASSETS

  • I got rid of a majority of the "states" and replaced them with "MENU" assets
  • These "menu" assets are pygame.sprite.Sprite(s) that handle everything themselves and leave the play state to just hold them
  • Doing this, the amount of needed states has been dropped down to just Title and Play.
  • advance, gameover, gameplay, lore, options, pause, and shop are all menu assets, handled entirely through playstate

BOSSES

  • There are multiple bosses, but they all pull from one Boss class
  • They all behave the same, but pull different attacks from a greater pool of global attacks
  • This is to add artificial content to the game to make it feel like there's more than there really is.
  • All of the attacks and states are performed within classes thhat handle all of the values themselves without pestering the boss's attributes too much.
  • Because of this, there are now like 16 bosses each with sets of moves.

TOUCH-UPS/TESTING

  • While the Menu Queue was a smart idea, it seemed to introduce some new bugs that relate to the GamePlay state's init starting a game sesh.
    • I need to figure out how to fix that, because currently the gameplay state and it's creations will start immediately when the game begins.
    • I figured it out. I just made it so the gameplay state can't make windows when it's not active.
  • I moved the title state to a menu now, so everything is in Play State. Lol.
  • Removed levels and a bunch of other files
  • Made a file that contains a "sprite" class which is just pygame.sprite.Sprite with some added values
  • Removed loadlist for images, anims, and audio.
  • I moved every file into respective folders so they can be categorized during imports, and made into an executable easier
  • Fixed the bug where PlayState doesn't restart after a game over
  • Fixed the way music plays with an "AutoSong" class

FINISHED!

  • The game is just about done now in terms of content, background workings, nerfs, buffs, etc!
  • There is enough music to keep the game working perfectly and sounding unique.
  • I am overall very happy about this.

PATCHES

  • Changed the Triple Shot to work more like a Shotgun
  • Changed the Wide Shot to work like a huge damageable wall
  • Balanced the prices
  • Fix the shop so duplicate items don't show up
  • Fix the boss instakill glitch
  • Add some warnings to bosses
  • Add more buffs to the bullets
  • [NEVERMIND] Add... gulp... a controls screen.

CREDITS

  • Honestly mostly everything has been edited and modified in some way so it is technically mine.
  • However I do have this list of assets used, although most aren't used anymore. "Harsh 8-Bit Explosion" - ImATaco "Explosion" - Kutejnikov "8bit_explosion_4.wav" - Soundholder "explosion_asteroid.wav" - runningmind "explosion1.wav" - alphatrooper18
  • All of these have their names changed and I don't know what goes to what
  • There are also this list of sounds I pulled off VoiceMod, which I don't think are copyrighted. "hi.wav" - Roblox: Work At a Pizza Place "bye.wav" - Roblox: Work At a Pizza Place "angry.wav" - Roblox: Work At a Pizza Place "boing0.wav" - Sonic the Hedgehog 1 "gravitycoil.wav" - Roblox: ??? "rizz.wav" - No idea. Some TV show from the early 2000s and repurposed in an old Vine. "siren.wav" - Also no idea. Also from Vine. "tada.wav" - Windows 95. Don't sue me please. "waah.wav" - Tied to the Yippee video somehow. "yippee.wav" - That video of the german kid that I don't think is copyrighted. "getout.wav" - Some GTA car show clip. "ford.wav" - The Ford startup sound when a door is open "dialup.wav" - The AOL dialup noises (not copyrighted)

About

My Finished Shmup Personal Project

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages