Skip to content

AJChurchJr/Yup-Rev4

Repository files navigation

(2026 UPDATE) A GOOD NOTE

  • This was my oldest project. It dates as far back as 2021. This game has went through so many reworks it's nuts. This was the fourth of five total code reworks.
  • The final release version of the game is at https://github.com/AJChurchJr/SavingYup

(not) SCRAPPED!

  • Yeah it's a bit sad but after working on this game for so long I think it's time to let go.
  • Yup, as a concept, started around 5 years ago, as an inside joke in middle school.
  • The game started development in python around 3-4 years ago.
  • After all this time, I sit here looking at my creation and honestly think I'm just tired of it.

IN HONOR OF THE PREVIOUS REVISIONS

  • Rev A: A scratch game, where the same enemy would come down at you over and over until eventually one boss came. That was the end of it.
  • Rev B: The first python revision. Had an assortment of different enemies come at set times, like a bad roguelike.
  • Rev C: The second python revision. One playable world with no boss, and a small variety of enemies that were the same per world.
  • Rev D: This one! Read everything about it here. There was so much done. So many new sprites, new enemies, worlds, bosses, and stories.

THE FUTURE?

  • I'll make more games. Hell, I may figure out a way to make this one again.
  • This game is just a good example to lead from as to how to make an overengineered mess.
  • If this game comes back, it will start with a simple basis unlike what this was.
  • This is my last pygame project. Everything else posted to my github came before it, even though it was just posted recently.
  • Thank you, anyone who watched.

WELCOME TO YUP

WHAT IS YUP?

  • Yup is a small shoot-em-up game that takes heavy referencing off of games like Galaga, Astro Warrior, and some other classics.
  • Everything within the game is an attempt to stay modular, with each part being its own file, class, or function for me to use in other projects.
  • This is the fourth iteration of the game. In the third one, I got too obsessed with optimization and changing everything up.
  • This is my last attempt: a refresher that ensures that I make a simple, intuitive game that I do not overthink about.

IMPORTANT NOTE

  • I deleted the placeholder songs because I felt bad.

YUP DEVLOG

PART TWO - ADDING CONTENT

  • 02/16/24: Added more things to the tutorial. I don't think I'm adding a plot to this game because the cutscenes are too boring to make.
  • 02/15/24: Tutorial is (mostly) complete.
  • 02/07/24: When completing a level, the levelcomplete screen is VERY finished.
  • 01/31/24: Enemies and bosses drop COINS instead of points now. There are issues relating to the screen being too cluttered, which will be worked on soon.
  • 01/30/24: Sun boss is complete, moving onto angel.
  • 01/17/24: Particle effect exists now, a lot more sounds
  • 01/13/24: Crustacean boss 90% complete and playable. Moving onto Sun.
  • 01/11/24: The crustacean boss is almost done.
  • 12/19/23: Two days early! CRT with placeholders is done. Working on Crustacean. Will finish at 12/30/2023
  • 12/08/23: I lied Nope works now. Working on CRT... gonna take a while I'd say around 12/21/23
  • 12/07/23: UFO Bosses Work. Nope promised beore 12/14/23
  • 11/20/23: Bosses work now, but there a bug after game-overing where the player isn't reset. Every time playstate restarts, reinstate the boss state player.
  • 11/08/23: added bullet textures, more sounds, etc.
  • 11/07/23: little jingle that happens when you start a new level, sounds begin to play now (LOUD, BE CAREFUL), and more plans down the line
  • 11/06/23: added a moving floor, fixed warning signs, created AutoImage so all values can potentially be animated, explosion effect when shot
  • 11/01/23: added WARNING SIGNS for enemies to use to notify the player where they're going to go
  • 10/29/23: added new bullets, all spawning patterns exist in game, all enemies have skins, unique entrance patterns per world
  • 10/20/23: added a bunch more spawning patterns, and fixed some more difficulty scaling issues
  • 10/20/23: added unique spawn patterns for the home world, somehow added a new bug in gameover, plans to optimize the vectors
  • 10/18/23: started adding unique entrance patterns, fixed gameover bug, plans to change formation entrance framework
  • 10/17/23: added most sprites, fixed difficulty scaling more
  • 10/11/23: Difficulty scaling tweaks, enemies shoot in attack state, plans to add more bullets
  • 10/07/23: Added temporary world backgrounds, enemies for vaporwave, nope, happy

PART ONE - GETTING IT ALL TOGETHER

  • 10/05/23: All enemies except NOPE_D have an attack structure. Difficulty Scaling now works
  • 09/29/23: Enemies move along a set path when spawning. Character A now has a set attack structure. It looks awesome.
  • 09/21/23: redid characters, almost finished with redoing the formation, redid characters spawning system, redid levels, patched bugs, levels can advance now, fixed high scores
  • 09/05/23: Finished all of game over, sprite groups fixed, etc.
  • 09/01/23: Almost finished the game over screen, I just have to fix bugs relating to emptying scores, sprite groups, and backgrounds
  • 08/07/23: Finished title screen - of course it can be fixed a little more but still
  • 07/31/23: started working on title screen, made high score graphics that are able to be used in the game, revamped text values into sprites that can be now handled separately
  • 07/23/23: added a pause menu
  • 07/??/23: added an options screen
  • 07/10/23: Removed old and bad sprites, replaced with simple shapes | tweaked anim | started working on config file | backgrounds move with character optionally
  • 06/30/23: made the configuration file usable
  • 06/30/23: made the screen and play dimensions resizeable, changed original resolution to 600x800 but scaled down
  • 06/24/23: FIXED THE FPS ISSUE
  • 06/24/23: sounds load and play now ; loading failsafe in place
  • 06/23/23: state_play's window now works as a separate surface that can be drawn to the window on its own, allowing for borders to now work.
  • 06/23/23: Formations can now randomly generate as well as manually generate, chances and specific details for formation modes now work
  • 06/22/23: Made it so manual formations will now loop
  • 06/22/23: Made formations actually spawn the correct characters
  • 06/22/23: (originally 6/20/23) images can now be resized, the ui bar is its own class in its own file
  • 06/18/23: formations now respawn when the level is completed
  • 06/06/23: changed animations to return surface ; fixed player invincibility bug
  • 06/06/23: formation spawns characters, makes characters attack, and checks for fomration completion
  • 06/05/23: added level documentation docstring for reference, as there's a lot of options ; used level to change dymanic intensities or whatnot ; made the level file decide everything in a bg
  • 06/03/23: added a little bar rectangle for the UI, when the
  • 06/03/23: programmed backgrounds; layering for scrolling images; resizing;
  • 06/02/23: made individual image loading
  • 06/02/23: made the formation somewhat functional, with a graphical representation of its position
  • 06/02/23: learned that **kwargs is a thing, also working on fixing arguments to be more universal per everything (characters, formations, states, etc)
  • 06/01/23: made a data file called "loadlist" that calls for everything to be preloaded; replaces RevC's large glob of image loading
  • 06/01/23: scrapped the class, made it a function for easier navigation and less confusing-ness; it now just returns a loaded level
  • 06/01/23: Made a class that takes the level data into account
  • 06/01/23: started loading all level files in /levels/
  • 05/31/23: started working on json files for levels
  • 05/31/23: ADDED levels.py, universal levels class/func to handle data
  • 05/31/23: Fixed up text.py and added finishing touches
  • 05/30/23: ADDED text.py, made numbers and text displayed
  • 05/30/23: halted player shoot animation if too many bullets onscreen
  • 05/30/23: organized files
  • 05/29/23: [START WORKING ON LOADING TEXT]
  • 05/28/23: Added new states instead of holding everything in main
  • 05/26/23: Added player collision; added default enemy death; made collision federally controlled; started bullets
  • 05/25/23: Added player movement barriers, made shooting animations, made early collision recognition
  • 05/24/23: Started working on Player. I realized I do not have to make everything interconnect at the start, as it makes me overthink everything. I just need to program YUP and get it all done with. She has values such as health and momentum, but movement is most of it: a dictionary containing information about moving up, down, left, and right.
  • 05/?/23: Made a character template with char_template.py, which stores default values and functions for characters to fall back to when there is not a unique value programmed. Examples include state, health, points, what to do when attacking, defending, etc.
  • 05/?/23: Made anim.py, which is a class that loads all spritesheets and data, analyzes animation JSONs, and updates frames; sprites use it as a reference to pull a spritesheet frame and use it in the sprite/set self.image to it.
  • 05/11/23: Used old sprite-gen program to make individual images into spritesheets and respective JSON files.
  • 05/11/23: Created new game folder; created outline files; created MAIN loop
  • 04/17/23: Conceptualization begins

TO DO / THOUGHT DUMP

WEEK ROADMAPS

  • Try to finish just ONE of these a day. No overworking
  • Implement a shop system to upgrade your items
  • Finish the angel boss
  • Final world BG and sprites
  • Final world boss
  • Flesh out the Events. Make them easier to use and make.
  • Tutorial End Cutscene
  • World End Cutscene
  • Change UFO death animation
  • Fix CRT and Crustacean animations
  • Change Home BG, Crt BG, Crustacean BG, Ocean BG

extra

TUTORIAL

  • Entrance info: displays text asking if you want a tutorial. Shoot yes or no.

YES - PHASES

  • Make PlayerDummy, a player that has all the aspects of the normal player but has values to check if certain things have happened
  • Make emblems for each thing, which will be added every step along the way
  • MOVE: set "moved" to false in PlayerDummy, spawn movement emblems
  • Do the same with jump, crouch, fastfall, shoot, focus
  • MAIN FOCUS: show that good things have green shadows, and bad things have red shadows. lock the player movement, and drop both items on the player to show one is harmless.
  • ENEMY TYPES: Show the way that type A enemies work, how type B enemies work, how type C enemies work, and show various special enemies. State they look different per world, with examples of the different worlds.
  • OUTRO: Center the player, and show the player happy, eating a sandwich. "CONGRATULATIONS. ENJOY A SANDWICH AS A REWARD." "DAMN", and the player flies off

NO

  • Just play the player eating a sandwich, and having it get stolen.

bosses

UFO

  • The hat yup hiding within a mechanical body
  • Idle: swinging back and forth in a double-sine position
  • Attack 1: does idle animation but shooting now
  • Attack 2: goes from place to place and shoots
  • Attack 3: goes down and tries to suck you up with the generic ufo sucker, and swings back upward in a quick motion
  • Death: Generic explosions all around. UFO spazzes out until he flies offscreen and the boss ends

NOPE

  • A larger version of the usual nope, now angrier and with pupils.
  • Intro: A small Nope alone in the formation, getting visibly more pissed every time you shoot him until he flings onscreen and becomes the boss.
  • Idle: consists of the Nope flying back and forth from different ends of the screen, horizontally.
  • Attack 1: Moving from place to place and consistently shooting in the same pattern, like a touhou bullet rain
  • Attack 2: Locking onto yup from above and bouncing down, causing a particle effect where you have to dodge the stars.
  • Attack 3: An aggressive spammy pattern, but now aimed at you. Can be paired with the particle rain to make a really difficult dodger
  • There can be a pinch mode where the bullets come out more often.

CRT

  • A more endurance battle, a crt screen in the background that shows faces
  • Idle: consists of the crt doing random animations in the background while an inferno of bullets spin. There is nothing to shoot except a control panel at the top center.
  • Intro: The windows background bluescreens, and the background zooms out to show a powered off CRT. It then powers on again, but now with an angry face. the background represents a server room.
  • Attack 1: Bullets stop, and robotic arms on the side attempt to luneg at and grab you. Either one arm or two.
  • Attack 2: The control panel you shoot glitches out and starts zapping random spots that are marked.
  • Attack 3: More of a final phase. The CRT jumps off the background and comes down in replacement of the control panel. Bullet patterns are shot out like in the idle state but will occasionally change to aim at you.
  • Death: The crt screen cracks, and with an electric shock, all the power in the facility goes out. The screen goes dark, and yup flies off.

CRUSTACEAN

  • A boss similar to the nope, but with far less bullets and far more dumb shennanigans
  • The seafloor background changes to a rushing one, with rippling water in the middle and hoards of seashells on the side.
  • Idle: The boss idly sits static in the center, making him an easy target during his idle state. However he has a TON of health. His soft side has less.
  • Intro: Crustacean waddles on in from the side of the screen, in the background on the floors in the distance, and then pushes really hard to lunge you into the boss background screen.
  • Attack 1: Fish will spawn, and will aim at you and slowly chomp. Shooting them will push them back, but they have a lot of health. Only goes away if killed.
  • Attack 2: Crustacean spawns random shells that sit and wait a moment, before lunging at you. Note there are two animations: flying out from the boss's body, then lunging at you. They are rather large too, so they're big targets that cannot be killed.
  • Attack 3: (Last phase) Crustacean's tentacles spread out and go offscreen, before coming out the borders of the screen and swiping at you. Dodge these tentacles and the other attacks.
  • Death: The shell breaks open and crustacean effin explodes lol

THE SUN

  • Do I have to explain it?
  • Intro: The background becomes more animated, and the sun's expression becomes angrier. It lowers to the bottom of the screen.
  • Idle: Similar to CRT, with a similar inferno of bullets but now faster and more sporatic. Different rain patterns as well. Occasionally, a cloud or meme will fall from the sky. All attacks are just to break the monotony.
  • Attack 1: Confetti rapidly rains down like the D enemy does, but with far more to dodge or shoot.
  • Attack 2: A realistic arm comes out of the sun, and will try to punch at you horizontally. Distract it by jumping and fast-falling for it to miss. Otherwise, move to the opposite of the screen.
  • Attack 3: A line of bullets shoots down from the top, excluding one small space where you have to fit through. This can happen multiple times at once.
  • Attack 4: The sun spits out a random confusing meme, which will bounce along the screen aggressively like the Nope world's D enemies. Can happen multiple times at once.
  • Attack 5: A solar flare may occur, in which you have to reach a certain part of the screen to shield it.
  • Death: As the game progresses, the sun's face will slowly get angrier and angrier, but in the last few it starts to get tired. Survive long enough, and the sun burns out. Shooting the sun speeds up this process. Eventually, the sun burns out, and all goes black. Unlike the CRT boss, however, there are a few brief frames of everything becoming stupidly generically creepy (like creepypasta stuff) like a jumpscare before the end world screen comes up.

EVIL-EYE (biblica)

  • A hooded figure that looms in the background, leaving the player on a shaky platform.
  • Idle: Biblica sits there and does nothing as a quick break for a few seconds.
  • Attack 1: Biblica lifts its arms up and sends out random magic spells at you, specifically eyes.
  • Attack 2: Biblica lifts its fists over the player and slams down at random parts, bumping you up or doing double damage if hit.
  • Attack 3: Biblica does a generic bullet pattern, specifically now feathers floating down the screen slowly.
  • Pinch phase: A horde of angels surround the background, and feathers are now constantly going. Attack 3 is replaced with an arm sweep from the angel.
  • Death: The eye pops, the fight ends.

BIG UFO (ufo2)

  • A larger version of the original UFO. You pretty much fight the bottom of it the entire time.
  • Similar to crt, there is a glass panel up top you are trying to shoot inside.
  • Idle: large ship opening up to release a random enemy from any world, with like 10 health each. It will do this every 60 seconds or so.
  • Attack 1: state consists of a laser beam coming down out of the release hole (you have to move out the way) with particle effects raining down from it (dodge those too)
  • Pinch: Bullet rain begins coming from the bottom on occasion, as a dripping effect

FINAL BOSS hatYUP

  • Inside of the mothership you came into before.
  • Intro: The ship scrolling stops as you reach the top. Another yup turns around to face you at the end, and takes a bite of your sandwich.
  • Idle: The yup moving around at the top of the screen, like you would at the bottom. It will shoot at you with the default bullet.
  • Attack 1:

AUDIO

  • Make sure all audio is equal in volume. No sounds until this happens.

CONTENT

  • Replace the Crouch ability with FOCUS: hold shift to move slower, and shrink your hitbox.
  • Make HURTING elements glow RED, make HEALING / SAFE elements glow GREEN.
  • Level intro indicator should have a dozen or so different effects.
  • Advance state should behave like the gameover state. [x] Background [ ] Bonuses [ ] Music
  • Emblems tween effect, where you place them somewhere and they stretch back to the original pos.
  • Graphic placements on spawn (specifically world 1 but itll work with anything)
  • Program FINAL world

OPTIMIZATION

  • anim should be used for anything with images. put Emblems, scoreboard loading, and text inside of it.

Global

  • call tools Global, and condense settings, clock, display, and global values within
  • make UI_Border use emblems that can be universally accessed and used.
  • put UI_Border object inside global instead of main
  • put most main-accessible values inside global for easy modification

BUGS

  • Every world except the first one starts at level 1 instead of 0. This is due to the way that state_play updates levels and does not initialize every new world. Check this off when every world either starts at level 0 or the issue is understood. (I am making level_in_world 0 the tutorial)
  • When the boss state selectively chooses to run advance state instead of playstate, for some reason playstate begins and runs in the middle of advancestate
  • Audio will clip out and run separately in different channels. Sort that out.

FEATURES

  • Add IntroEvent for worlds: plays special image cutscene -- fleshes out worlds and makes the game feel longer
  • Add IntroEvent for levels: new text after each level is complete, between levels not worlds -- fleshes out levels and makes them feel longedr
  • [NEVERMIND] Add events usable in levels called IntroEvent, which pulls from a new file to be created
  • Add a floor that moves with the player's y-velocity
  • [FIXED] THERE IS A BUG WITH THE B-CLASS ENEMIES WHERE THEY WILL SPAWN UNUSED WARNINGS IF YOU KILL THEM WHILE THEY ARE ATTACKING, FIRST FRAME [I THINK I FIXED IT]
  • in the AQUA world - the jellyfish special D type will only be able to be killed by jumping on him. he checks this through a special check run through jellyfish's on_collide function they will have a special idle state where they camp below the formation and do nothing else - in order to kill the other ones, you either have to jump on them at the start, or wait to kill them when they attack later - due to this, the aqua formation will not move down
  • Re-orderable spawn character orders (instead of in the order they are first spawned)
  • Store all movement values between points immediately so repeated calculations aren't needed - using movingpoints
  • Unique formations per world
  • Enemy replacements, specifically for D and E but it'll work with anything
  • unique entrances per world
  • Fix gameover bug
  • Add enemy skins per world
  • Add backgrounds per world
  • Instead of having values stored in MAIN to be passed down into states, instead have the passable items in their own file for everything to use freely. For example, instead of having Formation instances in PlayState, just give the formation.py file a value called "current_formation" that any state can pull from and use normally.
  • Make text and logos able to become its own state - used for the bar, and all the states - These will be able to be animated and move from place to place.
  • A second value that can be added to the state, specifically for options to know what to return to.
  • implement changes in intensity
  • sending characters into attack mode
  • starting a new level when the formation is empty
  • figure out what makes bg lag so bad
  • Contain more background info, like speeds, changes in speed,
  • Loading all JSON files
  • Loading a "world order" file in the levels folder (ignored by the level loader) that says what order the files go into
  • Add gameplay elements from MAIN to State_Game_Play
  • Make the gameplay level acknowledge the playing field over the pygame window
  • Add lives
  • Let the player die
  • Barriers upon movement based on bar argument
  • Shooting with the space bar
  • Shooting bullet limit
  • Getting hurt if collided, which goes with the universal "on_collide" function in characters
  • Playing animations with jumping, hitting the wall, getting hit
  • Loop formations or create new ones if there are no more formations left
  • Recognize a completed level and start a new one
  • Recognize a completed world and start a new one
  • Levels are loaded by the gameplay state.
  • The gameplay state does not exit and go to game over states, it just reruns __init__.
  • Characters do not individually run their own collision worries. This would be far too much code to run every frame. Instead, gameplay will individually check and run collision points for sprite classes whenever it is deemed fit. It worked for Shoot the Baby, it will work here.
  • Main has some universal variables that slowly get annoying to pass around as arguments. Maybe I can make it so all classes have them as global variables and MAIN gives them out pre-declaration, instead of in init?
  • States having a string element saying what state to go to next, for MAIN to recognize
  • "Mod Folders" where the program has to recognize words with "anim_loadlist", "levels","order", etc. to plug into main.

SEPARATE -- NEW CHARACTER WORLD MAP

  • There will now be five classes for each formation made, for the characters to now each fly in together
    • A (turret), B (generic), C (kamikazee). D (special), E (optional) (special2)
  • Instead of spawning each character in individually to a set pace, the characters will each rush in in their own pattern, together.

BUG REPORTS / ISSUES

BACKGROUNDS

  • With the background 'draw' function, the max framerate drops from 3000 to 250. It is incredibly unoptimized but I do not know what to do about it.

MENTAL

  • I notice I struggle to organize my thoughts a lot. A good example is pseudocode.
  • I was always able to just sit down and program something at once, as I am a very impulsive person.
  • I've been working on it recently; I believe one of the largest issues was that I tried to imagine everything working all together, instead of modularly.
  • I've been struggling by not following my own ideology, haha.

About

Revision 4 Of My Personal Shmup Project

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages