├── .gitignore ├── LICENSE ├── README.md ├── assets ├── Cagney │ ├── Creating Object │ │ ├── Boomerang │ │ │ └── resized │ │ │ │ ├── Boomerang_01_optimized.png │ │ │ │ ├── Boomerang_02_optimized.png │ │ │ │ ├── Boomerang_03_optimized.png │ │ │ │ ├── Boomerang_04_optimized.png │ │ │ │ ├── Boomerang_05_optimized.png │ │ │ │ ├── Boomerang_06_optimized.png │ │ │ │ ├── Boomerang_07_optimized.png │ │ │ │ └── Boomerang_08_optimized.png │ │ └── resized │ │ │ ├── Create_01_optimized.png │ │ │ ├── Create_02_optimized.png │ │ │ ├── Create_03_optimized.png │ │ │ ├── Create_04_optimized.png │ │ │ ├── Create_05_optimized.png │ │ │ ├── Create_06_optimized.png │ │ │ ├── Create_07_optimized.png │ │ │ ├── Create_08_optimized.png │ │ │ ├── Create_09_optimized.png │ │ │ ├── Create_10_optimized.png │ │ │ ├── Create_11_optimized.png │ │ │ ├── Create_12_optimized.png │ │ │ ├── Create_13_optimized.png │ │ │ ├── Create_14_optimized.png │ │ │ ├── Create_15_optimized.png │ │ │ ├── Create_16_optimized.png │ │ │ ├── Create_17_optimized.png │ │ │ ├── Create_18_optimized.png │ │ │ ├── Create_19_optimized.png │ │ │ ├── Create_20_optimized.png │ │ │ ├── Create_21a_optimized.png │ │ │ ├── Create_22_optimized.png │ │ │ ├── Create_23_optimized.png │ │ │ ├── Create_24_optimized.png │ │ │ ├── Create_25_optimized.png │ │ │ ├── Create_26_optimized.png │ │ │ └── Create_x_optimized.png │ ├── Death │ │ └── resized │ │ │ ├── Death_01_optimized.png │ │ │ ├── Death_02_optimized.png │ │ │ ├── Death_03_optimized.png │ │ │ ├── Death_04_optimized.png │ │ │ ├── Death_05_optimized.png │ │ │ ├── Death_06_optimized.png │ │ │ ├── Death_07_optimized.png │ │ │ ├── Death_08_optimized.png │ │ │ ├── Death_09_optimized.png │ │ │ ├── Death_10_optimized.png │ │ │ ├── Death_11_optimized.png │ │ │ └── Death_12_optimized.png │ ├── Firing Seeds │ │ ├── Seed Missiles │ │ │ └── Blue │ │ │ │ └── resized │ │ │ │ ├── Missile_B_01_optimized.png │ │ │ │ ├── Missile_B_02_optimized.png │ │ │ │ ├── Missile_B_03_optimized.png │ │ │ │ ├── Missile_B_04_optimized.png │ │ │ │ ├── Missile_B_05_optimized.png │ │ │ │ └── Missile_B_06_optimized.png │ │ ├── Venus Flytrap │ │ │ ├── Seed │ │ │ │ └── resized │ │ │ │ │ ├── Seed_Fall_A_01_optimized.png │ │ │ │ │ ├── Seed_Fall_A_02_optimized.png │ │ │ │ │ ├── Seed_Fall_A_03_optimized.png │ │ │ │ │ ├── Seed_Fall_A_04_optimized.png │ │ │ │ │ ├── Seed_Fall_A_05_optimized.png │ │ │ │ │ ├── Seed_Fall_A_06_optimized.png │ │ │ │ │ ├── Seed_Fall_A_07_optimized.png │ │ │ │ │ ├── Seed_Fall_A_08_optimized.png │ │ │ │ │ ├── Seed_Fall_A_09_optimized.png │ │ │ │ │ ├── Seed_Fall_A_10_optimized.png │ │ │ │ │ ├── Seed_Fall_A_11_optimized.png │ │ │ │ │ ├── Seed_Fall_A_12_optimized.png │ │ │ │ │ ├── Seed_Fall_A_13_optimized.png │ │ │ │ │ ├── Seed_Fall_A_14_optimized.png │ │ │ │ │ ├── Seed_Fall_A_15_optimized.png │ │ │ │ │ ├── Seed_Fall_A_16_optimized.png │ │ │ │ │ ├── Seed_Fall_A_17_optimized.png │ │ │ │ │ └── Seed_Fall_A_18_optimized.png │ │ │ └── resized │ │ │ │ ├── Venus_01_optimized.png │ │ │ │ ├── Venus_02_optimized.png │ │ │ │ ├── Venus_03_optimized.png │ │ │ │ ├── Venus_04_optimized.png │ │ │ │ ├── Venus_05_optimized.png │ │ │ │ ├── Venus_06_optimized.png │ │ │ │ ├── Venus_07_A_optimized.png │ │ │ │ ├── Venus_07_B_optimized.png │ │ │ │ ├── Venus_08_A_optimized.png │ │ │ │ ├── Venus_08_B_optimized.png │ │ │ │ ├── Venus_08_C_optimized.png │ │ │ │ ├── Venus_09_A_optimized.png │ │ │ │ ├── Venus_09_B_optimized.png │ │ │ │ ├── Venus_10_A_optimized.png │ │ │ │ ├── Venus_10_B_optimized.png │ │ │ │ ├── Venus_11_A_optimized.png │ │ │ │ ├── Venus_11_B_optimized.png │ │ │ │ └── Venus_12_optimized.png │ │ └── resized │ │ │ ├── FS_01_optimized.png │ │ │ ├── FS_02_optimized.png │ │ │ ├── FS_03_optimized.png │ │ │ ├── FS_04_optimized.png │ │ │ ├── FS_05_optimized.png │ │ │ ├── FS_06_optimized.png │ │ │ ├── FS_07_optimized.png │ │ │ ├── FS_08_optimized.png │ │ │ ├── FS_09_optimized.png │ │ │ ├── FS_10_optimized.png │ │ │ ├── FS_11_optimized.png │ │ │ ├── FS_12_optimized.png │ │ │ ├── FS_13_optimized.png │ │ │ ├── FS_14_optimized.png │ │ │ ├── FS_15_optimized.png │ │ │ ├── FS_16_optimized.png │ │ │ ├── FS_17_optimized.png │ │ │ ├── FS_18_optimized.png │ │ │ ├── FS_19_optimized.png │ │ │ ├── FS_20_optimized.png │ │ │ ├── FS_21_optimized.png │ │ │ └── FS_22_optimized.png │ ├── Idle │ │ └── resized │ │ │ ├── Idle_01_optimized.png │ │ │ ├── Idle_02_optimized.png │ │ │ ├── Idle_03_optimized.png │ │ │ ├── Idle_04_optimized.png │ │ │ ├── Idle_05_optimized.png │ │ │ ├── Idle_06_optimized.png │ │ │ ├── Idle_07_optimized.png │ │ │ ├── Idle_08_optimized.png │ │ │ ├── Idle_09_optimized.png │ │ │ ├── Idle_10_optimized.png │ │ │ ├── Idle_11_optimized.png │ │ │ ├── Idle_12_optimized.png │ │ │ ├── Idle_13_optimized.png │ │ │ ├── Idle_14_optimized.png │ │ │ ├── Idle_15_optimized.png │ │ │ ├── Idle_16_Unused_optimized.png │ │ │ ├── Idle_16_optimized.png │ │ │ ├── Idle_17_optimized.png │ │ │ ├── Idle_18_optimized.png │ │ │ ├── Idle_19_optimized.png │ │ │ ├── Idle_20_optimized.png │ │ │ ├── Idle_21_optimized.png │ │ │ ├── Idle_22_optimized.png │ │ │ ├── Idle_23_optimized.png │ │ │ └── Idle_24_optimized.png │ ├── Intro │ │ └── resized │ │ │ ├── Intro_01_optimized.png │ │ │ ├── Intro_02_optimized.png │ │ │ ├── Intro_03_optimized.png │ │ │ ├── Intro_04_optimized.png │ │ │ ├── Intro_05_optimized.png │ │ │ ├── Intro_06_optimized.png │ │ │ ├── Intro_07_optimized.png │ │ │ ├── Intro_08_optimized.png │ │ │ ├── Intro_09_optimized.png │ │ │ ├── Intro_10_optimized.png │ │ │ ├── Intro_11_optimized.png │ │ │ ├── Intro_12_optimized.png │ │ │ ├── Intro_13_optimized.png │ │ │ ├── Intro_14_optimized.png │ │ │ ├── Intro_15_optimized.png │ │ │ ├── Intro_16_optimized.png │ │ │ ├── Intro_17_optimized.png │ │ │ ├── Intro_18_optimized.png │ │ │ ├── Intro_19_optimized.png │ │ │ └── Intro_20_optimized.png │ ├── Pollen │ │ └── resized │ │ │ ├── Pollen_A_1_optimized.png │ │ │ ├── Pollen_A_2_optimized.png │ │ │ ├── Pollen_A_3_optimized.png │ │ │ ├── Pollen_A_4_optimized.png │ │ │ └── Pollen_A_5_optimized.png │ └── sounds │ │ ├── flower_gattling_loop.wav │ │ └── flower_intro_yell.wav ├── audio │ ├── cuphead_ost_floral_fury.mp3 │ ├── player_game_over.wav │ └── player_hit_01.wav ├── cuphead │ ├── Death │ │ └── resized │ │ │ ├── cuphead_death_body_0001_optimized.png │ │ │ ├── cuphead_death_body_0002_optimized.png │ │ │ ├── cuphead_death_body_0003_optimized.png │ │ │ ├── cuphead_death_body_0004_optimized.png │ │ │ ├── cuphead_death_body_0005_optimized.png │ │ │ ├── cuphead_death_body_0006_optimized.png │ │ │ ├── cuphead_death_body_0007_optimized.png │ │ │ ├── cuphead_death_body_0008_optimized.png │ │ │ ├── cuphead_death_body_0009_optimized.png │ │ │ ├── cuphead_death_body_0010_optimized.png │ │ │ ├── cuphead_death_body_0011_optimized.png │ │ │ ├── cuphead_death_body_0012_optimized.png │ │ │ ├── cuphead_death_body_0013_optimized.png │ │ │ ├── cuphead_death_body_0014_optimized.png │ │ │ ├── cuphead_death_body_0015_optimized.png │ │ │ └── cuphead_death_body_0016_optimized.png │ ├── Ghost │ │ └── resized │ │ │ ├── cuphead_ghost_0001_optimized.png │ │ │ ├── cuphead_ghost_0002_optimized.png │ │ │ ├── cuphead_ghost_0003_optimized.png │ │ │ ├── cuphead_ghost_0004_optimized.png │ │ │ ├── cuphead_ghost_0005_optimized.png │ │ │ ├── cuphead_ghost_0006_optimized.png │ │ │ ├── cuphead_ghost_0007_optimized.png │ │ │ ├── cuphead_ghost_0008_optimized.png │ │ │ ├── cuphead_ghost_0009_optimized.png │ │ │ ├── cuphead_ghost_0010_optimized.png │ │ │ ├── cuphead_ghost_0011_optimized.png │ │ │ ├── cuphead_ghost_0012_optimized.png │ │ │ ├── cuphead_ghost_0013_optimized.png │ │ │ ├── cuphead_ghost_0014_optimized.png │ │ │ ├── cuphead_ghost_0015_optimized.png │ │ │ ├── cuphead_ghost_0016_optimized.png │ │ │ ├── cuphead_ghost_0017_optimized.png │ │ │ ├── cuphead_ghost_0018_optimized.png │ │ │ ├── cuphead_ghost_0019_optimized.png │ │ │ ├── cuphead_ghost_0020_optimized.png │ │ │ ├── cuphead_ghost_0021_optimized.png │ │ │ ├── cuphead_ghost_0022_optimized.png │ │ │ ├── cuphead_ghost_0023_optimized.png │ │ │ ├── cuphead_ghost_0024_optimized.png │ │ │ ├── cuphead_revive_0001_optimized.png │ │ │ ├── cuphead_revive_0002_optimized.png │ │ │ ├── cuphead_revive_0003_optimized.png │ │ │ ├── cuphead_revive_0004_optimized.png │ │ │ ├── cuphead_revive_0005_optimized.png │ │ │ ├── cuphead_revive_0006_optimized.png │ │ │ ├── cuphead_revive_0007_optimized.png │ │ │ ├── cuphead_revive_0008_optimized.png │ │ │ ├── cuphead_revive_0009_optimized.png │ │ │ ├── cuphead_revive_0010_optimized.png │ │ │ ├── cuphead_revive_0011_optimized.png │ │ │ ├── cuphead_revive_0012_optimized.png │ │ │ ├── cuphead_revive_0013_optimized.png │ │ │ ├── cuphead_revive_0014_optimized.png │ │ │ ├── cuphead_revive_0015_optimized.png │ │ │ ├── cuphead_revive_0016_optimized.png │ │ │ ├── cuphead_revive_0017_optimized.png │ │ │ ├── cuphead_revive_0018_optimized.png │ │ │ ├── cuphead_revive_0019_optimized.png │ │ │ ├── cuphead_revive_0020_optimized.png │ │ │ ├── cuphead_revive_0021_optimized.png │ │ │ ├── cuphead_revive_0022_optimized.png │ │ │ ├── cuphead_revive_finale_0001_optimized.png │ │ │ ├── cuphead_revive_finale_0002_optimized.png │ │ │ ├── cuphead_revive_finale_0003_optimized.png │ │ │ ├── cuphead_revive_finale_0004_optimized.png │ │ │ ├── cuphead_revive_finale_0005_optimized.png │ │ │ └── cuphead_revive_finale_0006_optimized.png │ ├── Idle │ │ └── resized │ │ │ ├── cuphead_idle_0001_optimized.png │ │ │ ├── cuphead_idle_0002_optimized.png │ │ │ ├── cuphead_idle_0003_optimized.png │ │ │ ├── cuphead_idle_0004_optimized.png │ │ │ └── cuphead_idle_0005_optimized.png │ ├── Jump │ │ └── resized │ │ │ ├── cuphead_jump_0001_optimized.png │ │ │ ├── cuphead_jump_0002_optimized.png │ │ │ ├── cuphead_jump_0003_optimized.png │ │ │ ├── cuphead_jump_0004_optimized.png │ │ │ ├── cuphead_jump_0005_optimized.png │ │ │ ├── cuphead_jump_0006_optimized.png │ │ │ ├── cuphead_jump_0007_optimized.png │ │ │ └── cuphead_jump_0008_optimized.png │ ├── Run │ │ ├── Normal │ │ │ └── resized │ │ │ │ ├── cuphead_run_0001_optimized.png │ │ │ │ ├── cuphead_run_0002_optimized.png │ │ │ │ ├── cuphead_run_0003_optimized.png │ │ │ │ ├── cuphead_run_0004_optimized.png │ │ │ │ ├── cuphead_run_0005_optimized.png │ │ │ │ ├── cuphead_run_0006_optimized.png │ │ │ │ ├── cuphead_run_0007_optimized.png │ │ │ │ ├── cuphead_run_0008_optimized.png │ │ │ │ ├── cuphead_run_0009_optimized.png │ │ │ │ ├── cuphead_run_0010_optimized.png │ │ │ │ ├── cuphead_run_0011_optimized.png │ │ │ │ ├── cuphead_run_0012_optimized.png │ │ │ │ ├── cuphead_run_0013_optimized.png │ │ │ │ ├── cuphead_run_0014_optimized.png │ │ │ │ ├── cuphead_run_0015_optimized.png │ │ │ │ ├── cuphead_run_0016_optimized.png │ │ │ │ ├── cuphead_run_turnaround_0001_optimized.png │ │ │ │ └── cuphead_run_turnaround_0002_optimized.png │ │ └── Shooting │ │ │ └── Straight │ │ │ └── resized │ │ │ ├── cuphead_run_shoot_0001_optimized.png │ │ │ ├── cuphead_run_shoot_0002_optimized.png │ │ │ ├── cuphead_run_shoot_0003_optimized.png │ │ │ ├── cuphead_run_shoot_0004_optimized.png │ │ │ ├── cuphead_run_shoot_0005_optimized.png │ │ │ ├── cuphead_run_shoot_0006_optimized.png │ │ │ ├── cuphead_run_shoot_0007_optimized.png │ │ │ ├── cuphead_run_shoot_0008_optimized.png │ │ │ ├── cuphead_run_shoot_0009_optimized.png │ │ │ ├── cuphead_run_shoot_0010_optimized.png │ │ │ ├── cuphead_run_shoot_0011_optimized.png │ │ │ ├── cuphead_run_shoot_0012_optimized.png │ │ │ ├── cuphead_run_shoot_0013_optimized.png │ │ │ ├── cuphead_run_shoot_0014_optimized.png │ │ │ ├── cuphead_run_shoot_0015_optimized.png │ │ │ ├── cuphead_run_shoot_0016_optimized.png │ │ │ ├── cuphead_run_shoot_turnaround_0001_optimized.png │ │ │ └── cuphead_run_shoot_turnaround_0002_optimized.png │ ├── Shoot │ │ └── Straight │ │ │ └── resized │ │ │ ├── cuphead_shoot_straight_0001_optimized.png │ │ │ ├── cuphead_shoot_straight_0002_optimized.png │ │ │ ├── cuphead_shoot_straight_0003_optimized.png │ │ │ ├── cuphead_shoot_straight_boil_0001_optimized.png │ │ │ ├── cuphead_shoot_straight_boil_0002_optimized.png │ │ │ └── cuphead_shoot_straight_boil_0003_optimized.png │ └── sounds │ │ ├── player_death_01.wav │ │ ├── player_jump_01.wav │ │ └── player_spreadshot_fire_loop.wav ├── favicon.png └── resized │ ├── background_optimized.png │ ├── cuphead_ray_optimized.png │ ├── favicon_optimized.png │ ├── flowers_optimized.png │ ├── grass_optimized.png │ ├── life_dark_optimized.png │ └── life_filled_optimized.png ├── dist ├── main.js └── main.js.map ├── index.html ├── mugman.gif ├── package-lock.json ├── package.json ├── src ├── Animation │ └── index.ts ├── CollisionManager │ └── index.ts ├── Entity │ └── index.ts ├── Frames │ └── index.ts ├── GameManager │ ├── animations.ts │ ├── images.ts │ ├── index.ts │ └── sounds.ts ├── P5 │ └── Index.ts ├── Utils │ ├── Match.ts │ ├── RandomChoice.ts │ ├── RandomFloat.ts │ └── RandomInt.ts ├── Vec2 │ └── index.ts ├── decorators │ └── debounce.ts ├── main.ts ├── misc │ ├── drawing.ts │ └── preload.ts ├── skills │ ├── createboomerang.ts │ ├── createpollen.ts │ ├── createvenus.ts │ ├── launchseedmissile.ts │ ├── shootray.ts │ └── skill.ts └── types │ ├── global.d.ts │ └── maybe.d.ts ├── styles.css ├── tsconfig.json └── tsconfig.tsbuildinfo /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .vscode/ 3 | build/ 4 | .cache/ 5 | dist/ 6 | tsconfig.tsbuildinfo 7 | package-lock.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Bruno 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | Recreation of cuphead's floral fury boss fight 4 | 5 | ![Preview](https://github.com/PoorlyDefinedBehaviour/cuphead-floral-fury-boss-fight/blob/master/preview/preview.gif) 6 | 7 | # Installation 8 | 9 | ```sh 10 | git clone https://github.com/PoorlyDefinedBehaviour/browser-cuphead 11 | ``` 12 | 13 | # Usage 14 | 15 | ## Install dependencies 16 | 17 | ```sh 18 | type 'npm i' in the terminal 19 | ``` 20 | 21 | ## Compiling with typescript 22 | 23 | ```sh 24 | type 'tsc' in the terminal 25 | ``` 26 | 27 | ## Bundling with parcel 28 | 29 | ```sh 30 | type 'parcel build build/main.js' in the terminal 31 | ``` 32 | 33 | ## Serving the html file 34 | 35 | ```sh 36 | type 'npx serve' in the terminal 37 | ``` 38 | 39 | # FAQ 40 | 41 | ## tsc is not recognized as internal or external command 42 | 43 | ```sh 44 | install typescript globally 'npm i -g typescript' and follow the steps 45 | ``` 46 | 47 | ## parcel is not recognized as internal or external command 48 | 49 | ```sh 50 | install parcel globally 'npm i parcel-bundler' and follow the steps 51 | ``` 52 | 53 | # Contributing 54 | 55 | Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. 56 | 57 | Please make sure to update tests as appropriate. 58 | 59 | # License 60 | 61 | [MIT](https://choosealicense.com/licenses/mit/) 62 | -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/Boomerang/resized/Boomerang_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/Boomerang/resized/Boomerang_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_13_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_13_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_14_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_14_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_15_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_15_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_16_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_16_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_17_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_17_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_18_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_18_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_19_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_19_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_20_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_20_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_21a_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_21a_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_22_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_22_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_23_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_23_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_24_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_24_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_25_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_25_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_26_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_26_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Creating Object/resized/Create_x_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Creating Object/resized/Create_x_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Death/resized/Death_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Death/resized/Death_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_13_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_13_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_14_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_14_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_15_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_15_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_16_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_16_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_17_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_17_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_18_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_18_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_A_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_A_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_B_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_B_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_A_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_A_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_B_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_B_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_C_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_C_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_A_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_A_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_B_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_B_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_A_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_A_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_B_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_B_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_A_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_A_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_B_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_B_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_13_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_13_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_14_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_14_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_15_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_15_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_16_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_16_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_17_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_17_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_18_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_18_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_19_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_19_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_20_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_20_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_21_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_21_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Firing Seeds/resized/FS_22_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Firing Seeds/resized/FS_22_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_13_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_13_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_14_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_14_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_15_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_15_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_16_Unused_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_16_Unused_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_16_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_16_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_17_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_17_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_18_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_18_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_19_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_19_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_20_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_20_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_21_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_21_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_22_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_22_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_23_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_23_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Idle/resized/Idle_24_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Idle/resized/Idle_24_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_01_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_01_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_02_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_02_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_03_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_03_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_04_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_04_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_05_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_05_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_06_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_06_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_07_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_07_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_08_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_08_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_09_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_09_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_10_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_10_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_11_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_11_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_12_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_12_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_13_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_13_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_14_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_14_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_15_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_15_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_16_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_16_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_17_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_17_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_18_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_18_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_19_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_19_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Intro/resized/Intro_20_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Intro/resized/Intro_20_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Pollen/resized/Pollen_A_1_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Pollen/resized/Pollen_A_1_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Pollen/resized/Pollen_A_2_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Pollen/resized/Pollen_A_2_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Pollen/resized/Pollen_A_3_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Pollen/resized/Pollen_A_3_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Pollen/resized/Pollen_A_4_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Pollen/resized/Pollen_A_4_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/Pollen/resized/Pollen_A_5_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/Pollen/resized/Pollen_A_5_optimized.png -------------------------------------------------------------------------------- /assets/Cagney/sounds/flower_gattling_loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/sounds/flower_gattling_loop.wav -------------------------------------------------------------------------------- /assets/Cagney/sounds/flower_intro_yell.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/Cagney/sounds/flower_intro_yell.wav -------------------------------------------------------------------------------- /assets/audio/cuphead_ost_floral_fury.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/audio/cuphead_ost_floral_fury.mp3 -------------------------------------------------------------------------------- /assets/audio/player_game_over.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/audio/player_game_over.wav -------------------------------------------------------------------------------- /assets/audio/player_hit_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/audio/player_hit_01.wav -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0009_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0009_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0010_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0010_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0011_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0011_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0012_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0012_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0013_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0013_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0014_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0014_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0015_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0015_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Death/resized/cuphead_death_body_0016_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Death/resized/cuphead_death_body_0016_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0009_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0009_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0010_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0010_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0011_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0011_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0012_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0012_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0013_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0013_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0014_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0014_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0015_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0015_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0016_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0016_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0017_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0017_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0018_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0018_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0019_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0019_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0020_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0020_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0021_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0021_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0022_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0022_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0023_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0023_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_ghost_0024_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_ghost_0024_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0009_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0009_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0010_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0010_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0011_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0011_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0012_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0012_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0013_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0013_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0014_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0014_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0015_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0015_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0016_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0016_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0017_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0017_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0018_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0018_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0019_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0019_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0020_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0020_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0021_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0021_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_0022_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_0022_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Ghost/resized/cuphead_revive_finale_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Ghost/resized/cuphead_revive_finale_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Idle/resized/cuphead_idle_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Idle/resized/cuphead_idle_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Idle/resized/cuphead_idle_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Idle/resized/cuphead_idle_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Idle/resized/cuphead_idle_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Idle/resized/cuphead_idle_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Idle/resized/cuphead_idle_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Idle/resized/cuphead_idle_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Idle/resized/cuphead_idle_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Idle/resized/cuphead_idle_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Jump/resized/cuphead_jump_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Jump/resized/cuphead_jump_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0009_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0009_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0010_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0010_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0011_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0011_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0012_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0012_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0013_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0013_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0014_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0014_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0015_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0015_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_0016_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_0016_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_turnaround_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_turnaround_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Normal/resized/cuphead_run_turnaround_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Normal/resized/cuphead_run_turnaround_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0004_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0004_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0005_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0005_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0006_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0006_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0007_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0007_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0008_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0008_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0009_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0009_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0010_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0010_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0011_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0011_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0012_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0012_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0013_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0013_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0014_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0014_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0015_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0015_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0016_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0016_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_turnaround_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_turnaround_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_turnaround_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_turnaround_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0001_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0001_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0002_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0002_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0003_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_boil_0003_optimized.png -------------------------------------------------------------------------------- /assets/cuphead/sounds/player_death_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/sounds/player_death_01.wav -------------------------------------------------------------------------------- /assets/cuphead/sounds/player_jump_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/sounds/player_jump_01.wav -------------------------------------------------------------------------------- /assets/cuphead/sounds/player_spreadshot_fire_loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/cuphead/sounds/player_spreadshot_fire_loop.wav -------------------------------------------------------------------------------- /assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/favicon.png -------------------------------------------------------------------------------- /assets/resized/background_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/background_optimized.png -------------------------------------------------------------------------------- /assets/resized/cuphead_ray_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/cuphead_ray_optimized.png -------------------------------------------------------------------------------- /assets/resized/favicon_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/favicon_optimized.png -------------------------------------------------------------------------------- /assets/resized/flowers_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/flowers_optimized.png -------------------------------------------------------------------------------- /assets/resized/grass_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/grass_optimized.png -------------------------------------------------------------------------------- /assets/resized/life_dark_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/life_dark_optimized.png -------------------------------------------------------------------------------- /assets/resized/life_filled_optimized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/assets/resized/life_filled_optimized.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |

12 | Loading... may take up to 10 seconds
13 | Controls -> W, A, S, D and SPACE 14 |

15 |
16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /mugman.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PoorlyDefinedBehaviour/browser-cuphead/722d3dc3dc1cd25a019df1d265168c7458f74f92/mugman.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cuphead", 3 | "version": "1.0.0", 4 | "description": "cuphead on the browser", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "tsc && parcel build build/main.js && npx serve", 8 | "build": "tsc && parcel build build/main.js" 9 | }, 10 | "repository": { 11 | "url": "https://github.com/PoorlyDefinedBehaviour/browser-cuphead" 12 | }, 13 | "keywords": [ 14 | "cuphead", 15 | "typescript", 16 | "p5js", 17 | "game" 18 | ], 19 | "author": "", 20 | "license": "MIT", 21 | "devDependencies": { 22 | "@types/p5": "^0.7.3", 23 | "cssnano": "^4.1.10", 24 | "parcel-bundler": "^1.12.3", 25 | "typescript": "^3.5.3" 26 | }, 27 | "dependencies": { 28 | "p5": "^0.9.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Animation/index.ts: -------------------------------------------------------------------------------- 1 | import { sketch } from "../P5/Index"; 2 | 3 | export interface IFrameDimensions { 4 | width: number; 5 | height: number; 6 | } 7 | 8 | export class Animation { 9 | private id: string; 10 | private frames: Array = []; 11 | private skippable: boolean = true; 12 | private current_frame: number = 0; 13 | private last_frame_request_timestamp: number = 0; 14 | private frame_delay: number; 15 | 16 | constructor( 17 | frames: Array, 18 | frame_delay: number = 60, 19 | id: string = "none", 20 | skippable: boolean = true 21 | ) { 22 | this.frames = frames.map(frame => sketch.loadImage(frame)); 23 | this.frame_delay = frame_delay; 24 | this.id = id; 25 | this.skippable = skippable; 26 | } 27 | 28 | public get_id = (): string => this.id; 29 | 30 | public set_skippable = (skippable: boolean): Animation => { 31 | this.skippable = skippable; 32 | return this; 33 | }; 34 | 35 | public is_skippable = (): boolean => this.skippable; 36 | 37 | public next_frame = (): any => { 38 | const timePassed = Date.now() - this.last_frame_request_timestamp; 39 | 40 | if (timePassed > this.frame_delay) { 41 | ++this.current_frame; 42 | this.last_frame_request_timestamp = Date.now(); 43 | } 44 | 45 | if (this.current_frame > this.frames.length - 1) this.current_frame = 0; 46 | 47 | return this.frames[this.current_frame]; 48 | }; 49 | 50 | public is_last_frame = (): boolean => 51 | this.current_frame === this.frames.length - 1; 52 | 53 | public get_dimensions = (): IFrameDimensions => ({ 54 | width: this.frames[this.current_frame].width, 55 | height: this.frames[this.current_frame].height 56 | }); 57 | 58 | public get_current_frame_number = (): number => this.current_frame; 59 | 60 | public get_num_frames = (): number => this.frames.length; 61 | } 62 | -------------------------------------------------------------------------------- /src/CollisionManager/index.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from "../Entity"; 2 | 3 | import { Vec2 } from "../Vec2"; 4 | 5 | import { IFrameDimensions, Animation } from "../Animation"; 6 | 7 | import { Skill } from "../Skills/Skill"; 8 | 9 | import { GameSounds } from "../GameManager/sounds"; 10 | 11 | import { Maybe } from "../types/maybe"; 12 | 13 | import { sketch } from "../P5/Index"; 14 | 15 | export class CollisionManager { 16 | public static rect_rect = ( 17 | x: number, 18 | y: number, 19 | w: number, 20 | h: number, 21 | x2: number, 22 | y2: number, 23 | w2: number, 24 | h2: number 25 | ): boolean => x + w >= x2 && x <= x2 + w2 && y + h >= y2 && y <= y2 + h2; 26 | 27 | public static aabb = (a: Entity | Skill, b: Entity | Skill): boolean => { 28 | const a_position: Vec2 = a.get_position(); 29 | const a_dimensions: IFrameDimensions = a.get_animation().get_dimensions(); 30 | 31 | const b_position: Vec2 = b.get_position(); 32 | const b_dimensions: IFrameDimensions = b.get_animation().get_dimensions(); 33 | 34 | return CollisionManager.rect_rect( 35 | a_position.x, 36 | a_position.y, 37 | a_dimensions.width, 38 | a_dimensions.height, 39 | b_position.x, 40 | b_position.y, 41 | b_dimensions.width, 42 | b_dimensions.height 43 | ); 44 | }; 45 | 46 | public static collision_skill_entity = ( 47 | entity: Entity, 48 | skill_list: Array 49 | ): void => { 50 | for (let i = skill_list.length - 1; i > -1; --i) { 51 | if (skill_list[i].is_owned_by_player() && entity.get_id() === "player") 52 | continue; 53 | 54 | if (entity.get_id() !== "player" && !skill_list[i].is_owned_by_player()) 55 | continue; 56 | 57 | if (CollisionManager.aabb(entity, skill_list[i])) { 58 | entity.receive_damage(skill_list[i].get_damage()); 59 | skill_list.splice(i, 1); 60 | GameSounds.entity_hit.play(); 61 | } 62 | } 63 | }; 64 | 65 | public static collision_between_skills = ( 66 | skill_index: number, 67 | skill_list: Array 68 | ): void => { 69 | const current_skill = skill_list[skill_index]; 70 | 71 | if (!current_skill) return; 72 | 73 | for (let i = skill_list.length - 1; i > -1; --i) { 74 | if ( 75 | skill_list[i].is_owned_by_player() && 76 | current_skill.is_owned_by_player() 77 | ) 78 | continue; 79 | 80 | if ( 81 | !current_skill.is_owned_by_player() && 82 | !skill_list[i].is_owned_by_player() 83 | ) 84 | continue; 85 | 86 | if (i === skill_index) continue; 87 | if (CollisionManager.aabb(current_skill, skill_list[i])) 88 | skill_list.splice(i, 1); 89 | } 90 | }; 91 | 92 | public static out_of_screen = (skill: Skill): boolean => { 93 | if (!skill) return false; 94 | 95 | const minimum_distance: number = 2000; 96 | 97 | const { x, y }: Vec2 = skill.get_position(); 98 | const { 99 | width, 100 | height 101 | }: IFrameDimensions = skill.get_animation().get_dimensions(); 102 | 103 | return ( 104 | x - width < -minimum_distance || 105 | x > sketch.windowWidth + minimum_distance || 106 | y - height < -minimum_distance || 107 | y > sketch.windowWidth + minimum_distance 108 | ); 109 | }; 110 | 111 | public static is_on_ground = ( 112 | entity: Entity, 113 | floor_height: number 114 | ): boolean => { 115 | const animation: Maybe = entity.get_animation(); 116 | if (!animation) { 117 | return true; 118 | } 119 | 120 | const velocity: Vec2 = entity.get_velocity(); 121 | if (velocity.y < 0) { 122 | return false; 123 | } 124 | 125 | const position: Vec2 = entity.get_position(); 126 | const dimensions: IFrameDimensions = animation.get_dimensions(); 127 | 128 | return CollisionManager.rect_rect( 129 | position.x, 130 | position.y, 131 | dimensions.width, 132 | dimensions.height, 133 | 0, 134 | floor_height, 135 | sketch.windowWidth, 136 | sketch.windowWidth 137 | ); 138 | }; 139 | } 140 | -------------------------------------------------------------------------------- /src/Entity/index.ts: -------------------------------------------------------------------------------- 1 | import { Animation } from "../Animation"; 2 | import { Vec2 } from "../Vec2"; 3 | import { Maybe } from "../types/maybe"; 4 | 5 | export enum EDirections { 6 | LEFT, 7 | RIGHT, 8 | UP, 9 | DOWN 10 | } 11 | 12 | export class Entity { 13 | private id: string; 14 | private position: Vec2 = { x: 0, y: 0 }; 15 | private velocity: Vec2 = { x: 0, y: 0 }; 16 | 17 | private animations: Map = new Map(); 18 | 19 | private when_animation_over_fn: any = () => {}; 20 | 21 | private move_speed: number = 5; 22 | 23 | private current_animation: string = "idle"; 24 | 25 | public direction: number = EDirections.RIGHT; 26 | public health: number = 100; 27 | 28 | constructor() { 29 | setInterval(() => { 30 | const animation: Maybe = this.get_animation(); 31 | 32 | if (animation && animation.is_last_frame()) { 33 | this.when_animation_over_fn(); 34 | this.when_animation_over_fn = () => {}; 35 | } 36 | }, 60); 37 | } 38 | 39 | public set_id = (id: string): Entity => { 40 | this.id = id; 41 | return this; 42 | }; 43 | 44 | public get_id = (): string => this.id; 45 | 46 | public set_health = (health: number): Entity => { 47 | this.health = health; 48 | return this; 49 | }; 50 | 51 | public get_health = (): number => this.health; 52 | 53 | public is_dead = (): boolean => this.health <= 0; 54 | 55 | public receive_damage = (amount: number): Entity => { 56 | if (!this.is_dead()) this.health -= amount; 57 | return this; 58 | }; 59 | 60 | public set_move_speed = (speed: number): Entity => { 61 | this.move_speed = speed; 62 | return this; 63 | }; 64 | 65 | public get_move_speed = (): number => this.move_speed; 66 | 67 | public set_position = (x: number, y: number): Entity => { 68 | this.position = { x, y }; 69 | return this; 70 | }; 71 | 72 | public get_position = (): Vec2 => this.position; 73 | 74 | public set_velocity = (x: number, y: number): Entity => { 75 | this.velocity = { x, y }; 76 | return this; 77 | }; 78 | 79 | public get_velocity = (): Vec2 => this.velocity; 80 | 81 | set_animation = (name: string, force: boolean = false): Entity => { 82 | const animation: Maybe = this.get_animation(); 83 | 84 | if (force || !animation || animation.is_skippable()) 85 | this.current_animation = name; 86 | 87 | return this; 88 | }; 89 | 90 | public get_animation = (): Maybe => 91 | this.animations.get(this.current_animation); 92 | 93 | public when_over = (fn: any): Entity => { 94 | this.when_animation_over_fn = fn; 95 | return this; 96 | }; 97 | 98 | public add_animation = ( 99 | name: string, 100 | frames: Array, 101 | delay?: number, 102 | id?: string, 103 | skippable?: boolean 104 | ): Entity => { 105 | if (!name) throw new Error("Animation identifier is required"); 106 | if (!frames) throw new Error("Frames are required"); 107 | 108 | this.animations.set(name, new Animation(frames, delay, id, skippable)); 109 | return this; 110 | }; 111 | 112 | public remove_animation = (name: string): Entity => { 113 | this.animations.delete(name); 114 | return this; 115 | }; 116 | } 117 | -------------------------------------------------------------------------------- /src/Frames/index.ts: -------------------------------------------------------------------------------- 1 | export class AnimationFrames { 2 | public static cuphead: any = { 3 | idle: [ 4 | "../assets/cuphead/Idle/resized/cuphead_idle_0001_optimized.png", 5 | "../assets/cuphead/Idle/resized/cuphead_idle_0002_optimized.png", 6 | "../assets/cuphead/Idle/resized/cuphead_idle_0003_optimized.png", 7 | "../assets/cuphead/Idle/resized/cuphead_idle_0004_optimized.png", 8 | "../assets/cuphead/Idle/resized/cuphead_idle_0005_optimized.png", 9 | "../assets/cuphead/Idle/resized/cuphead_idle_0004_optimized.png", 10 | "../assets/cuphead/Idle/resized/cuphead_idle_0003_optimized.png", 11 | "../assets/cuphead/Idle/resized/cuphead_idle_0002_optimized.png" 12 | ], 13 | run: { 14 | normal: [ 15 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0001_optimized.png", 16 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0002_optimized.png", 17 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0003_optimized.png", 18 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0004_optimized.png", 19 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0005_optimized.png", 20 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0006_optimized.png", 21 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0007_optimized.png", 22 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0008_optimized.png", 23 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0009_optimized.png", 24 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0010_optimized.png", 25 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0011_optimized.png", 26 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0012_optimized.png", 27 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0013_optimized.png", 28 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0014_optimized.png", 29 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0015_optimized.png", 30 | "../assets/cuphead/Run/Normal/resized/cuphead_run_0016_optimized.png" 31 | ], 32 | gun: [ 33 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0001_optimized.png", 34 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0002_optimized.png", 35 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0003_optimized.png", 36 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0004_optimized.png", 37 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0005_optimized.png", 38 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0006_optimized.png", 39 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0007_optimized.png", 40 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0008_optimized.png", 41 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0009_optimized.png", 42 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0010_optimized.png", 43 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0011_optimized.png", 44 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0012_optimized.png", 45 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0013_optimized.png", 46 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0014_optimized.png", 47 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0015_optimized.png", 48 | "../assets/cuphead/Run/Shooting/Straight/resized/cuphead_run_shoot_0016_optimized.png" 49 | ] 50 | }, 51 | jump: [ 52 | "../assets/cuphead/Jump/resized/cuphead_jump_0001_optimized.png", 53 | "../assets/cuphead/Jump/resized/cuphead_jump_0002_optimized.png", 54 | "../assets/cuphead/Jump/resized/cuphead_jump_0003_optimized.png", 55 | "../assets/cuphead/Jump/resized/cuphead_jump_0004_optimized.png", 56 | "../assets/cuphead/Jump/resized/cuphead_jump_0005_optimized.png", 57 | "../assets/cuphead/Jump/resized/cuphead_jump_0006_optimized.png", 58 | "../assets/cuphead/Jump/resized/cuphead_jump_0007_optimized.png", 59 | "../assets/cuphead/Jump/resized/cuphead_jump_0008_optimized.png" 60 | ], 61 | death: [ 62 | "../assets/cuphead/Death/resized/cuphead_death_body_0001_optimized.png", 63 | "../assets/cuphead/Death/resized/cuphead_death_body_0002_optimized.png", 64 | "../assets/cuphead/Death/resized/cuphead_death_body_0003_optimized.png", 65 | "../assets/cuphead/Death/resized/cuphead_death_body_0004_optimized.png", 66 | "../assets/cuphead/Death/resized/cuphead_death_body_0005_optimized.png", 67 | "../assets/cuphead/Death/resized/cuphead_death_body_0006_optimized.png", 68 | "../assets/cuphead/Death/resized/cuphead_death_body_0007_optimized.png", 69 | "../assets/cuphead/Death/resized/cuphead_death_body_0008_optimized.png", 70 | "../assets/cuphead/Death/resized/cuphead_death_body_0009_optimized.png", 71 | "../assets/cuphead/Death/resized/cuphead_death_body_0010_optimized.png", 72 | "../assets/cuphead/Death/resized/cuphead_death_body_0011_optimized.png", 73 | "../assets/cuphead/Death/resized/cuphead_death_body_0012_optimized.png", 74 | "../assets/cuphead/Death/resized/cuphead_death_body_0013_optimized.png", 75 | "../assets/cuphead/Death/resized/cuphead_death_body_0014_optimized.png", 76 | "../assets/cuphead/Death/resized/cuphead_death_body_0015_optimized.png", 77 | "../assets/cuphead/Death/resized/cuphead_death_body_0016_optimized.png", 78 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0001_optimized.png", 79 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0002_optimized.png", 80 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0003_optimized.png", 81 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0004_optimized.png", 82 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0005_optimized.png", 83 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0006_optimized.png", 84 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0007_optimized.png", 85 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0008_optimized.png", 86 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0009_optimized.png", 87 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0010_optimized.png", 88 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0011_optimized.png", 89 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0012_optimized.png", 90 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0013_optimized.png", 91 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0014_optimized.png", 92 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0015_optimized.png", 93 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0016_optimized.png", 94 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0017_optimized.png", 95 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0018_optimized.png", 96 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0019_optimized.png", 97 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0020_optimized.png", 98 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0021_optimized.png", 99 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0022_optimized.png", 100 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0023_optimized.png", 101 | "../assets/cuphead/Ghost/resized/cuphead_ghost_0024_optimized.png", 102 | "../assets/cuphead/Ghost/resized/cuphead_revive_0001_optimized.png", 103 | "../assets/cuphead/Ghost/resized/cuphead_revive_0002_optimized.png", 104 | "../assets/cuphead/Ghost/resized/cuphead_revive_0003_optimized.png", 105 | "../assets/cuphead/Ghost/resized/cuphead_revive_0004_optimized.png", 106 | "../assets/cuphead/Ghost/resized/cuphead_revive_0005_optimized.png", 107 | "../assets/cuphead/Ghost/resized/cuphead_revive_0006_optimized.png", 108 | "../assets/cuphead/Ghost/resized/cuphead_revive_0007_optimized.png", 109 | "../assets/cuphead/Ghost/resized/cuphead_revive_0008_optimized.png", 110 | "../assets/cuphead/Ghost/resized/cuphead_revive_0009_optimized.png", 111 | "../assets/cuphead/Ghost/resized/cuphead_revive_0010_optimized.png", 112 | "../assets/cuphead/Ghost/resized/cuphead_revive_0011_optimized.png", 113 | "../assets/cuphead/Ghost/resized/cuphead_revive_0012_optimized.png", 114 | "../assets/cuphead/Ghost/resized/cuphead_revive_0013_optimized.png", 115 | "../assets/cuphead/Ghost/resized/cuphead_revive_0014_optimized.png", 116 | "../assets/cuphead/Ghost/resized/cuphead_revive_0015_optimized.png", 117 | "../assets/cuphead/Ghost/resized/cuphead_revive_0016_optimized.png", 118 | "../assets/cuphead/Ghost/resized/cuphead_revive_0017_optimized.png", 119 | "../assets/cuphead/Ghost/resized/cuphead_revive_0018_optimized.png", 120 | "../assets/cuphead/Ghost/resized/cuphead_revive_0019_optimized.png", 121 | "../assets/cuphead/Ghost/resized/cuphead_revive_0020_optimized.png", 122 | "../assets/cuphead/Ghost/resized/cuphead_revive_0021_optimized.png", 123 | "../assets/cuphead/Ghost/resized/cuphead_revive_0022_optimized.png" 124 | ], 125 | shoot: [ 126 | "../assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0001_optimized.png", 127 | "../assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0002_optimized.png", 128 | "../assets/cuphead/Shoot/Straight/resized/cuphead_shoot_straight_0003_optimized.png" 129 | ] 130 | }; 131 | 132 | public static cagney: any = { 133 | intro: [ 134 | "../assets/Cagney/Intro/resized/Intro_08_optimized.png", 135 | "../assets/Cagney/Intro/resized/Intro_09_optimized.png", 136 | "../assets/Cagney/Intro/resized/Intro_10_optimized.png", 137 | "../assets/Cagney/Intro/resized/Intro_11_optimized.png", 138 | "../assets/Cagney/Intro/resized/Intro_12_optimized.png", 139 | "../assets/Cagney/Intro/resized/Intro_13_optimized.png", 140 | "../assets/Cagney/Intro/resized/Intro_14_optimized.png", 141 | "../assets/Cagney/Intro/resized/Intro_15_optimized.png", 142 | "../assets/Cagney/Intro/resized/Intro_16_optimized.png", 143 | "../assets/Cagney/Intro/resized/Intro_17_optimized.png", 144 | "../assets/Cagney/Intro/resized/Intro_18_optimized.png", 145 | "../assets/Cagney/Intro/resized/Intro_19_optimized.png", 146 | "../assets/Cagney/Intro/resized/Intro_20_optimized.png" 147 | ], 148 | idle: [ 149 | "../assets/Cagney/Idle/resized/Idle_01_optimized.png", 150 | "../assets/Cagney/Idle/resized/Idle_02_optimized.png", 151 | "../assets/Cagney/Idle/resized/Idle_03_optimized.png", 152 | "../assets/Cagney/Idle/resized/Idle_04_optimized.png", 153 | "../assets/Cagney/Idle/resized/Idle_05_optimized.png", 154 | "../assets/Cagney/Idle/resized/Idle_06_optimized.png", 155 | "../assets/Cagney/Idle/resized/Idle_07_optimized.png", 156 | "../assets/Cagney/Idle/resized/Idle_08_optimized.png", 157 | "../assets/Cagney/Idle/resized/Idle_09_optimized.png", 158 | "../assets/Cagney/Idle/resized/Idle_10_optimized.png", 159 | "../assets/Cagney/Idle/resized/Idle_11_optimized.png", 160 | "../assets/Cagney/Idle/resized/Idle_12_optimized.png", 161 | "../assets/Cagney/Idle/resized/Idle_13_optimized.png", 162 | "../assets/Cagney/Idle/resized/Idle_14_optimized.png", 163 | "../assets/Cagney/Idle/resized/Idle_15_optimized.png", 164 | "../assets/Cagney/Idle/resized/Idle_16_optimized.png", 165 | "../assets/Cagney/Idle/resized/Idle_17_optimized.png", 166 | "../assets/Cagney/Idle/resized/Idle_18_optimized.png", 167 | "../assets/Cagney/Idle/resized/Idle_19_optimized.png", 168 | "../assets/Cagney/Idle/resized/Idle_20_optimized.png", 169 | "../assets/Cagney/Idle/resized/Idle_21_optimized.png", 170 | "../assets/Cagney/Idle/resized/Idle_22_optimized.png", 171 | "../assets/Cagney/Idle/resized/Idle_23_optimized.png", 172 | "../assets/Cagney/Idle/resized/Idle_24_optimized.png" 173 | ], 174 | create_object: [ 175 | "../assets/Cagney/Creating Object/resized/Create_01_optimized.png", 176 | "../assets/Cagney/Creating Object/resized/Create_02_optimized.png", 177 | "../assets/Cagney/Creating Object/resized/Create_03_optimized.png", 178 | "../assets/Cagney/Creating Object/resized/Create_04_optimized.png", 179 | "../assets/Cagney/Creating Object/resized/Create_05_optimized.png", 180 | "../assets/Cagney/Creating Object/resized/Create_06_optimized.png", 181 | "../assets/Cagney/Creating Object/resized/Create_07_optimized.png", 182 | "../assets/Cagney/Creating Object/resized/Create_08_optimized.png", 183 | "../assets/Cagney/Creating Object/resized/Create_09_optimized.png", 184 | "../assets/Cagney/Creating Object/resized/Create_10_optimized.png", 185 | "../assets/Cagney/Creating Object/resized/Create_11_optimized.png", 186 | "../assets/Cagney/Creating Object/resized/Create_12_optimized.png", 187 | "../assets/Cagney/Creating Object/resized/Create_13_optimized.png", 188 | "../assets/Cagney/Creating Object/resized/Create_14_optimized.png", 189 | "../assets/Cagney/Creating Object/resized/Create_15_optimized.png", 190 | "../assets/Cagney/Creating Object/resized/Create_16_optimized.png", 191 | "../assets/Cagney/Creating Object/resized/Create_17_optimized.png", 192 | "../assets/Cagney/Creating Object/resized/Create_18_optimized.png", 193 | "../assets/Cagney/Creating Object/resized/Create_19_optimized.png", 194 | "../assets/Cagney/Creating Object/resized/Create_20_optimized.png", 195 | "../assets/Cagney/Creating Object/resized/Create_21a_optimized.png", 196 | "../assets/Cagney/Creating Object/resized/Create_22_optimized.png", 197 | "../assets/Cagney/Creating Object/resized/Create_23_optimized.png", 198 | "../assets/Cagney/Creating Object/resized/Create_24_optimized.png", 199 | "../assets/Cagney/Creating Object/resized/Create_25_optimized.png", 200 | "../assets/Cagney/Creating Object/resized/Create_26_optimized.png", 201 | "../assets/Cagney/Creating Object/resized/Create_x_optimized.png" 202 | ], 203 | death: [ 204 | "../assets/Cagney/Death/resized/Death_01_optimized.png", 205 | "../assets/Cagney/Death/resized/Death_02_optimized.png", 206 | "../assets/Cagney/Death/resized/Death_03_optimized.png", 207 | "../assets/Cagney/Death/resized/Death_04_optimized.png", 208 | "../assets/Cagney/Death/resized/Death_05_optimized.png", 209 | "../assets/Cagney/Death/resized/Death_06_optimized.png", 210 | "../assets/Cagney/Death/resized/Death_07_optimized.png", 211 | "../assets/Cagney/Death/resized/Death_08_optimized.png", 212 | "../assets/Cagney/Death/resized/Death_09_optimized.png", 213 | "../assets/Cagney/Death/resized/Death_10_optimized.png", 214 | "../assets/Cagney/Death/resized/Death_11_optimized.png", 215 | "../assets/Cagney/Death/resized/Death_12_optimized.png" 216 | ], 217 | firing_seeds: [ 218 | "../assets/Cagney/Firing Seeds/resized/FS_01_optimized.png", 219 | "../assets/Cagney/Firing Seeds/resized/FS_02_optimized.png", 220 | "../assets/Cagney/Firing Seeds/resized/FS_03_optimized.png", 221 | "../assets/Cagney/Firing Seeds/resized/FS_04_optimized.png", 222 | "../assets/Cagney/Firing Seeds/resized/FS_05_optimized.png", 223 | "../assets/Cagney/Firing Seeds/resized/FS_06_optimized.png", 224 | "../assets/Cagney/Firing Seeds/resized/FS_07_optimized.png", 225 | "../assets/Cagney/Firing Seeds/resized/FS_08_optimized.png", 226 | "../assets/Cagney/Firing Seeds/resized/FS_09_optimized.png", 227 | "../assets/Cagney/Firing Seeds/resized/FS_10_optimized.png", 228 | "../assets/Cagney/Firing Seeds/resized/FS_11_optimized.png", 229 | "../assets/Cagney/Firing Seeds/resized/FS_12_optimized.png", 230 | "../assets/Cagney/Firing Seeds/resized/FS_13_optimized.png", 231 | "../assets/Cagney/Firing Seeds/resized/FS_14_optimized.png", 232 | "../assets/Cagney/Firing Seeds/resized/FS_15_optimized.png", 233 | "../assets/Cagney/Firing Seeds/resized/FS_16_optimized.png", 234 | "../assets/Cagney/Firing Seeds/resized/FS_17_optimized.png", 235 | "../assets/Cagney/Firing Seeds/resized/FS_18_optimized.png", 236 | "../assets/Cagney/Firing Seeds/resized/FS_19_optimized.png", 237 | "../assets/Cagney/Firing Seeds/resized/FS_20_optimized.png", 238 | "../assets/Cagney/Firing Seeds/resized/FS_21_optimized.png", 239 | "../assets/Cagney/Firing Seeds/resized/FS_22_optimized.png" 240 | ] 241 | }; 242 | 243 | public static skills: any = { 244 | ray: ["../assets/resized/cuphead_ray_optimized.png"], 245 | missile: [ 246 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_01_optimized.png", 247 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_02_optimized.png", 248 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_03_optimized.png", 249 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_04_optimized.png", 250 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_05_optimized.png", 251 | "../assets/Cagney/Firing Seeds/Seed Missiles/Blue/resized/Missile_B_06_optimized.png" 252 | ], 253 | seed_missile: [ 254 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_01_optimized.png", 255 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_02_optimized.png", 256 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_03_optimized.png", 257 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_04_optimized.png", 258 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_05_optimized.png", 259 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_06_optimized.png", 260 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_07_optimized.png", 261 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_08_optimized.png", 262 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_09_optimized.png", 263 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_10_optimized.png", 264 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_11_optimized.png", 265 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_12_optimized.png", 266 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_13_optimized.png", 267 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_14_optimized.png", 268 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_15_optimized.png", 269 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_16_optimized.png", 270 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_17_optimized.png", 271 | "../assets/Cagney/Firing Seeds/Venus Flytrap/Seed/resized/Seed_Fall_A_18_optimized.png" 272 | ], 273 | pollen: [ 274 | "../assets/Cagney/Pollen/resized/Pollen_A_1_optimized.png", 275 | "../assets/Cagney/Pollen/resized/Pollen_A_2_optimized.png", 276 | "../assets/Cagney/Pollen/resized/Pollen_A_3_optimized.png", 277 | "../assets/Cagney/Pollen/resized/Pollen_A_4_optimized.png" 278 | ], 279 | boomerang: [ 280 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_01_optimized.png", 281 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_02_optimized.png", 282 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_03_optimized.png", 283 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_04_optimized.png", 284 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_05_optimized.png", 285 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_06_optimized.png", 286 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_07_optimized.png", 287 | "../assets/Cagney/Creating Object/Boomerang/resized/Boomerang_08_optimized.png" 288 | ], 289 | venus: [ 290 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_01_optimized.png", 291 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_02_optimized.png", 292 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_03_optimized.png", 293 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_04_optimized.png", 294 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_05_optimized.png", 295 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_06_optimized.png", 296 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_A_optimized.png", 297 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_07_B_optimized.png", 298 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_A_optimized.png", 299 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_B_optimized.png", 300 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_08_C_optimized.png", 301 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_A_optimized.png", 302 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_09_B_optimized.png", 303 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_A_optimized.png", 304 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_10_B_optimized.png", 305 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_A_optimized.png", 306 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_11_B_optimized.png", 307 | "../assets/Cagney/Firing Seeds/Venus Flytrap/resized/Venus_12_optimized.png" 308 | ] 309 | }; 310 | 311 | } 312 | -------------------------------------------------------------------------------- /src/GameManager/animations.ts: -------------------------------------------------------------------------------- 1 | export class Animations { 2 | public static cuphead: any = { 3 | idle: Symbol(), 4 | run: { normal: Symbol(), gun: Symbol() }, 5 | jump: Symbol(), 6 | death: Symbol(), 7 | shoot: Symbol() 8 | }; 9 | 10 | public static cagney: any = { 11 | intro: Symbol(), 12 | idle: Symbol(), 13 | create_object: Symbol(), 14 | death: Symbol(), 15 | firing_seeds: Symbol() 16 | }; 17 | 18 | public static skills: any = { 19 | missile: null 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /src/GameManager/images.ts: -------------------------------------------------------------------------------- 1 | export class GameImages { 2 | public static game_background: any; 3 | public static flowers_parallax: any; 4 | public static grass: any; 5 | public static cuphead_health_icon_filled: any; 6 | public static cuphead_health_icon_dark: any; 7 | } 8 | -------------------------------------------------------------------------------- /src/GameManager/index.ts: -------------------------------------------------------------------------------- 1 | import { Entity, EDirections } from "../Entity"; 2 | import { Skill } from "../Skills/Skill"; 3 | import { Maybe } from "../types/maybe"; 4 | import { Vec2 } from "../Vec2"; 5 | 6 | import { CollisionManager } from "../CollisionManager"; 7 | 8 | import { GameImages } from "./images"; 9 | import { Animations } from "./animations"; 10 | 11 | import { preload_images, preload_characters } from "../Misc/preload"; 12 | import { draw_entity, draw_health, draw_skills } from "../Misc/drawing"; 13 | 14 | import { GameSounds } from "./sounds"; 15 | 16 | import { IFrameDimensions, Animation } from "../Animation"; 17 | 18 | import { shoot_ray } from "../Skills/ShootRay"; 19 | import { launch_seed_missile } from "../Skills/LaunchSeedMissile"; 20 | import { create_boomerang } from "../Skills/CreateBoomerang"; 21 | import { create_venus } from "../Skills/CreateVenus"; 22 | import { create_pollen } from "../Skills/CreatePollen"; 23 | 24 | import { random_int } from "../Utils/RandomInt"; 25 | import { random_choice } from "../Utils/RandomChoice"; 26 | import { Match } from "../Utils/Match"; 27 | 28 | import { sketch } from "../P5/Index"; 29 | 30 | export class GameManager { 31 | private cuphead: Entity; 32 | private cagney: Entity; 33 | 34 | private skill_list: Array = []; 35 | 36 | private floor_height: number; 37 | private cuphead_jump_height: number = 10; 38 | 39 | start = (): void => { 40 | sketch.preload = (): void => { 41 | preload_images(sketch); 42 | [this.cagney, this.cuphead] = preload_characters(sketch); 43 | }; 44 | 45 | sketch.setup = (): void => { 46 | sketch.frameRate(60); 47 | sketch.createCanvas(sketch.windowWidth, sketch.windowHeight); 48 | 49 | this.floor_height = sketch.windowHeight - 250; 50 | 51 | (document as any).getElementById("main-container").style.display = "none"; 52 | }; 53 | 54 | sketch.draw = (): void => { 55 | sketch.background(100); 56 | sketch.image( 57 | GameImages.game_background, 58 | 0, 59 | 0, 60 | sketch.windowWidth, 61 | sketch.windowHeight 62 | ); 63 | 64 | if (CollisionManager.is_on_ground(this.cuphead, this.floor_height)) { 65 | this.cuphead.set_velocity(this.cuphead.get_velocity().x, 0); 66 | this.cuphead.set_animation(Animations.cuphead.idle); 67 | } else { 68 | this.gravity(); 69 | } 70 | 71 | this.make_boss_attack(this.cagney, this.cuphead, this.skill_list); 72 | 73 | this.handle_key_press(this.cuphead, this.skill_list); 74 | this.handle_deaths(); 75 | 76 | draw_entity(this.cuphead); 77 | draw_entity(this.cagney); 78 | draw_health(this.cuphead); 79 | draw_skills(this.skill_list); 80 | 81 | this.collision(); 82 | 83 | sketch.image(GameImages.grass, sketch.windowWidth - 420, 450); 84 | sketch.image( 85 | GameImages.flowers_parallax, 86 | -60, 87 | sketch.windowHeight - 250, 88 | sketch.windowWidth + 60 89 | ); 90 | }; 91 | 92 | sketch.windowResized = () => { 93 | sketch.resizeCanvas(sketch.windowWidth, sketch.windowHeight); 94 | 95 | this.floor_height = sketch.windowHeight - 250; 96 | 97 | if (this.cagney) 98 | this.cagney.set_position( 99 | sketch.windowWidth - 380, 100 | sketch.windowHeight - 650 101 | ); 102 | }; 103 | }; 104 | 105 | private handle_deaths = (): void => { 106 | if ( 107 | this.cuphead.is_dead() && 108 | (this.cuphead.get_animation() as any).toString() !== 109 | Animations.cuphead.death 110 | ) { 111 | this.cuphead 112 | .set_animation(Animations.cuphead.death) 113 | .when_over(this.restart); 114 | GameSounds.cuphead_death.play(); 115 | } 116 | 117 | if (this.cagney.is_dead()) 118 | this.cagney 119 | .set_animation(Animations.cagney.death, true) 120 | .when_over(this.restart), 121 | (this.skill_list = []); 122 | }; 123 | 124 | private collision = (): void => { 125 | if (CollisionManager.aabb(this.cuphead, this.cagney)) 126 | this.cuphead.receive_damage(1), GameSounds.entity_hit.play(); 127 | 128 | for (let i = this.skill_list.length - 1; i > -1; --i) { 129 | if (CollisionManager.out_of_screen(this.skill_list[i])) { 130 | this.skill_list.splice(i, 1); 131 | continue; 132 | } 133 | 134 | CollisionManager.collision_between_skills(i, this.skill_list); 135 | CollisionManager.collision_skill_entity(this.cagney, this.skill_list); 136 | CollisionManager.collision_skill_entity(this.cuphead, this.skill_list); 137 | } 138 | }; 139 | 140 | private gravity = (): void => { 141 | const force: number = 0.37; 142 | 143 | const position: Vec2 = this.cuphead.get_position(); 144 | const velocity: Vec2 = this.cuphead.get_velocity(); 145 | 146 | this.cuphead.set_velocity(velocity.x, velocity.y + force); 147 | this.cuphead.set_position(position.x + velocity.x, position.y + velocity.y); 148 | }; 149 | 150 | private handle_key_press = ( 151 | entity: Entity, 152 | skill_list: Array 153 | ): void => { 154 | const animation: Maybe = entity.get_animation(); 155 | if (!animation) return; 156 | 157 | const position: Vec2 = entity.get_position(); 158 | const velocity: Vec2 = entity.get_velocity(); 159 | 160 | const dimensions: IFrameDimensions = animation.get_dimensions(); 161 | 162 | if (sketch.keyIsDown(32) && !this.cuphead.is_dead()) { 163 | if (CollisionManager.is_on_ground(entity, this.floor_height)) { 164 | entity.set_animation(Animations.cuphead.shoot); 165 | } 166 | 167 | shoot_ray(entity, skill_list); 168 | } 169 | 170 | if (sketch.keyIsDown(65)) { 171 | entity.direction = EDirections.LEFT; 172 | 173 | if (CollisionManager.is_on_ground(entity, this.floor_height)) { 174 | entity.set_animation(Animations.cuphead.run.normal); 175 | } 176 | 177 | if (position.x > 0) { 178 | entity.set_position(position.x - entity.get_move_speed(), position.y); 179 | } 180 | } 181 | 182 | if (sketch.keyIsDown(68)) { 183 | entity.direction = EDirections.RIGHT; 184 | 185 | if (CollisionManager.is_on_ground(entity, this.floor_height)) { 186 | entity.set_animation(Animations.cuphead.run.normal); 187 | } 188 | 189 | if (position.x + dimensions.width < sketch.windowWidth) { 190 | entity.set_position(position.x + entity.get_move_speed(), position.y); 191 | } 192 | } 193 | 194 | if (sketch.keyIsDown(65) && sketch.keyIsDown(32)) { 195 | entity.direction = EDirections.LEFT; 196 | 197 | if (CollisionManager.is_on_ground(entity, this.floor_height)) { 198 | entity.set_animation(Animations.cuphead.run.gun); 199 | } 200 | 201 | if (position.x > 0) { 202 | entity.set_position(position.x - entity.get_move_speed(), position.y); 203 | } 204 | } 205 | 206 | if (sketch.keyIsDown(68) && sketch.keyIsDown(32)) { 207 | entity.direction = EDirections.RIGHT; 208 | 209 | if (CollisionManager.is_on_ground(entity, this.floor_height)) { 210 | entity.set_animation(Animations.cuphead.run.gun); 211 | } 212 | 213 | if (position.x + dimensions.width < sketch.windowWidth) { 214 | entity.set_position(position.x + entity.get_move_speed(), position.y); 215 | } 216 | } 217 | 218 | if ( 219 | sketch.keyIsDown(87) && 220 | CollisionManager.is_on_ground(entity, this.floor_height) 221 | ) { 222 | entity.set_animation(Animations.cuphead.jump); 223 | entity.set_velocity(velocity.x, -this.cuphead_jump_height); 224 | GameSounds.cuphead_jump.play(); 225 | } 226 | }; 227 | 228 | private make_boss_attack = ( 229 | cagney: Entity, 230 | cuphead: Entity, 231 | skill_list: Array 232 | ): void => { 233 | const animation: Maybe = cagney.get_animation(); 234 | if (!animation || !animation.is_last_frame()) return; 235 | 236 | Match( 237 | random_int(0, 3), 238 | [ 239 | 0, 240 | () => { 241 | cagney.set_animation(Animations.cagney.firing_seeds); 242 | launch_seed_missile(skill_list); 243 | GameSounds.cagney_firing_seeds.play(0, 1, 0.03, 0, 1); 244 | } 245 | ], 246 | [ 247 | 1, 248 | () => { 249 | cagney.set_animation(Animations.cagney.create_object), 250 | random_choice(create_boomerang, create_pollen)(cagney, skill_list); 251 | } 252 | ], 253 | [2, () => create_venus(cuphead, skill_list)], 254 | [3, () => cagney.set_animation(Animations.cagney.idle)] 255 | ); 256 | }; 257 | 258 | private restart = (): void => { 259 | this.cuphead 260 | .set_health(3) 261 | .set_animation(Animations.cuphead.jump, true) 262 | .set_position(10, 10) 263 | .set_velocity(0, 0); 264 | 265 | this.cagney.set_health(500).set_animation(Animations.cagney.intro, true); 266 | 267 | GameSounds.cagney_intro_yell.play(); 268 | }; 269 | } 270 | -------------------------------------------------------------------------------- /src/GameManager/sounds.ts: -------------------------------------------------------------------------------- 1 | export class GameSounds { 2 | public static main_theme: any; 3 | 4 | public static cuphead_attack: any; 5 | public static cuphead_jump: any; 6 | public static cuphead_death: any; 7 | 8 | public static cagney_firing_seeds: any; 9 | public static cagney_intro_yell: any; 10 | 11 | public static entity_hit: any; 12 | } 13 | -------------------------------------------------------------------------------- /src/P5/Index.ts: -------------------------------------------------------------------------------- 1 | import p5 from "p5"; 2 | import "p5/lib/addons/p5.sound"; 3 | import "p5/lib/addons/p5.dom"; 4 | 5 | export const sketch = new p5(() => {}); 6 | -------------------------------------------------------------------------------- /src/Utils/Match.ts: -------------------------------------------------------------------------------- 1 | export const MatchAny: boolean = true; 2 | 3 | export const Match = (value_to_match: any, ...args: any): any => { 4 | for (const [value, action] of args) { 5 | if (value === value_to_match || value === MatchAny) { 6 | return typeof action === "function" ? action() : action; 7 | } 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /src/Utils/RandomChoice.ts: -------------------------------------------------------------------------------- 1 | import { random_int } from "./RandomInt"; 2 | 3 | export const random_choice = (a: any, b: any): any => { 4 | if (Array.isArray(a)) { 5 | return a[Math.floor(Math.random() * a.length) - 1]; 6 | } 7 | 8 | return random_int(0, 1) ? a : b; 9 | }; 10 | -------------------------------------------------------------------------------- /src/Utils/RandomFloat.ts: -------------------------------------------------------------------------------- 1 | export const random_float = (start: number, end: number): number => 2 | Math.random() * (end - start + 1) + start; 3 | -------------------------------------------------------------------------------- /src/Utils/RandomInt.ts: -------------------------------------------------------------------------------- 1 | export const random_int = (start: number, end: number): number => 2 | Math.floor(Math.random() * (end - start + 1)) + start; 3 | -------------------------------------------------------------------------------- /src/Vec2/index.ts: -------------------------------------------------------------------------------- 1 | export interface Vec2 { 2 | x: number; 3 | y: number; 4 | } 5 | -------------------------------------------------------------------------------- /src/decorators/debounce.ts: -------------------------------------------------------------------------------- 1 | 2 | export const debounce = (fn: any, ms: number): any => { 3 | function wrapper(this: any, ...args: any): any { 4 | if (Date.now() - wrapper.timestamp > ms) { 5 | fn.apply(this, args); 6 | wrapper.timestamp = Date.now(); 7 | } 8 | } 9 | 10 | wrapper.timestamp = 0; 11 | return wrapper; 12 | }; 13 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { GameManager } from "./GameManager"; 2 | 3 | new GameManager().start(); 4 | -------------------------------------------------------------------------------- /src/misc/drawing.ts: -------------------------------------------------------------------------------- 1 | import { sketch } from "../P5/Index"; 2 | 3 | import { Entity, EDirections } from "../Entity"; 4 | 5 | import { Skill } from "../Skills/Skill"; 6 | 7 | import { Animation } from "../Animation"; 8 | 9 | import { GameImages } from "../GameManager/images"; 10 | import { Animations } from "../GameManager/animations"; 11 | 12 | import { Maybe } from "../types/maybe"; 13 | 14 | import { Vec2 } from "../Vec2"; 15 | 16 | export const draw_entity = (entity: Entity): void => { 17 | const position: Vec2 = entity.get_position(); 18 | 19 | const animation: Maybe = entity.get_animation(); 20 | if (!animation) return; 21 | 22 | const frame: any = animation.next_frame(); 23 | 24 | sketch.push(); 25 | sketch.translate(position.x, position.y); 26 | 27 | if (entity.direction === EDirections.LEFT) { 28 | sketch.translate(frame.width, 0); 29 | sketch.scale(-1.0, 1.0); 30 | } else { 31 | sketch.scale(1.0, 1.0); 32 | } 33 | 34 | if ( 35 | entity.get_id() === "boss" && 36 | animation.get_id() === "missile" && 37 | animation.get_current_frame_number() > 5 && 38 | animation.get_current_frame_number() < 18 39 | ) { 40 | sketch.image(Animations.skills.missile.next_frame(), 90, -110); 41 | } 42 | 43 | sketch.image(frame, 0, 0); 44 | sketch.pop(); 45 | }; 46 | 47 | export const draw_skills = (skill_list: Array): void => { 48 | for (const skill of skill_list) { 49 | skill.update(); 50 | 51 | const position = skill.get_position(); 52 | const frame = skill.get_animation().next_frame(); 53 | 54 | sketch.push(); 55 | sketch.translate(position.x, position.y); 56 | 57 | skill.direction === EDirections.LEFT 58 | ? sketch.scale(-1.0, 1.0) 59 | : sketch.scale(1.0, 1.0); 60 | 61 | sketch.image(frame, 0, 0); 62 | sketch.pop(); 63 | } 64 | }; 65 | 66 | export const draw_health = (cuphead: Entity): void => { 67 | for (let i = 0; i < 3; ++i) { 68 | sketch.image( 69 | i < cuphead.get_health() 70 | ? GameImages.cuphead_health_icon_filled 71 | : GameImages.cuphead_health_icon_dark, 72 | i * 90, 73 | 10 74 | ); 75 | } 76 | }; 77 | -------------------------------------------------------------------------------- /src/misc/preload.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from "../Entity"; 2 | import { GameImages } from "../GameManager/images"; 3 | import { Animations } from "../GameManager/animations"; 4 | import { AnimationFrames } from "../Frames"; 5 | import { GameSounds } from "../GameManager/sounds"; 6 | import { Animation } from "../Animation"; 7 | 8 | export const preload_characters = (sketch: p5): Array => { 9 | const cuphead: Entity = new Entity() 10 | .set_id("player") 11 | .set_health(3) 12 | .add_animation(Animations.cuphead.idle, AnimationFrames.cuphead.idle, 90) 13 | .add_animation( 14 | Animations.cuphead.run.normal, 15 | AnimationFrames.cuphead.run.normal 16 | ) 17 | .add_animation(Animations.cuphead.run.gun, AnimationFrames.cuphead.run.gun) 18 | .add_animation(Animations.cuphead.shoot, AnimationFrames.cuphead.shoot, 60) 19 | .add_animation(Animations.cuphead.jump, AnimationFrames.cuphead.jump) 20 | .add_animation( 21 | Animations.cuphead.death, 22 | AnimationFrames.cuphead.death, 23 | 60, 24 | "none", 25 | false 26 | ) 27 | .set_animation(Animations.cuphead.jump); 28 | 29 | const cagney: Entity = new Entity() 30 | .set_id("boss") 31 | .set_health(500) 32 | .set_position(sketch.windowWidth - 380, sketch.windowHeight - 650) 33 | .add_animation(Animations.cagney.idle, AnimationFrames.cagney.idle) 34 | .add_animation( 35 | Animations.cagney.create_object, 36 | AnimationFrames.cagney.create_object 37 | ) 38 | .add_animation( 39 | Animations.cagney.firing_seeds, 40 | AnimationFrames.cagney.firing_seeds, 41 | 60, 42 | "missile" 43 | ) 44 | .set_animation(Animations.cagney.idle); 45 | 46 | setTimeout(() => { 47 | cagney 48 | .add_animation( 49 | Animations.cagney.death, 50 | AnimationFrames.cagney.death, 51 | 150, 52 | "none", 53 | true 54 | ) 55 | .add_animation( 56 | Animations.cagney.intro, 57 | AnimationFrames.cagney.intro, 58 | 70, 59 | "none", 60 | true 61 | ); 62 | }, 10000); 63 | 64 | return [cagney, cuphead]; 65 | }; 66 | 67 | export const preload_images = (sketch: p5): void => { 68 | Animations.skills.missile = new Animation(AnimationFrames.skills.missile); 69 | 70 | GameImages.game_background = sketch.loadImage( 71 | "../assets/resized/background_optimized.png" 72 | ); 73 | GameImages.flowers_parallax = sketch.loadImage( 74 | "../assets/resized/flowers_optimized.png" 75 | ); 76 | GameImages.grass = sketch.loadImage("../assets/resized/grass_optimized.png"); 77 | 78 | GameImages.cuphead_health_icon_filled = sketch.loadImage( 79 | "../assets/resized/life_filled_optimized.png" 80 | ); 81 | 82 | GameImages.cuphead_health_icon_dark = sketch.loadImage( 83 | "../assets/resized/life_dark_optimized.png" 84 | ); 85 | 86 | GameSounds.main_theme = ((sketch as any) as p5.SoundFile).loadSound( 87 | "../assets/audio/cuphead_ost_floral_fury.mp3", 88 | () => { 89 | GameSounds.main_theme.setVolume(0.1); 90 | GameSounds.main_theme.loop(); 91 | } 92 | ); 93 | 94 | GameSounds.entity_hit = ((sketch as any) as p5.SoundFile).loadSound( 95 | "../assets/audio/player_hit_01.wav", 96 | () => GameSounds.entity_hit.setVolume(0.008) 97 | ); 98 | 99 | GameSounds.cuphead_attack = ((sketch as any) as p5.SoundFile).loadSound( 100 | "../assets/cuphead/sounds/player_spreadshot_fire_loop.wav", 101 | () => GameSounds.cuphead_attack.setVolume(0.02) 102 | ); 103 | 104 | GameSounds.cuphead_jump = ((sketch as any) as p5.SoundFile).loadSound( 105 | "../assets/cuphead/sounds/player_jump_01.wav", 106 | () => GameSounds.cuphead_jump.setVolume(0.03) 107 | ); 108 | 109 | GameSounds.cuphead_death = ((sketch as any) as p5.SoundFile).loadSound( 110 | "../assets/cuphead/sounds/player_death_01.wav", 111 | () => GameSounds.cuphead_death.setVolume(0.005) 112 | ); 113 | 114 | GameSounds.cagney_firing_seeds = ((sketch as any) as p5.SoundFile).loadSound( 115 | "../assets/Cagney/sounds/flower_gattling_loop.wav", 116 | () => GameSounds.cagney_firing_seeds.setVolume(0.2) 117 | ); 118 | 119 | GameSounds.cagney_intro_yell = ((sketch as any) as p5.SoundFile).loadSound( 120 | "../assets/Cagney/sounds/flower_intro_yell.wav", 121 | () => GameSounds.cagney_intro_yell.setVolume(0.08) 122 | ); 123 | }; 124 | -------------------------------------------------------------------------------- /src/skills/createboomerang.ts: -------------------------------------------------------------------------------- 1 | import { Skill } from "./Skill"; 2 | import { Entity, EDirections } from "../Entity"; 3 | import { Vec2 } from "../Vec2"; 4 | import { AnimationFrames } from "../Frames"; 5 | import { random_choice } from "../Utils/RandomChoice"; 6 | 7 | export const create_boomerang = ( 8 | entity: Entity, 9 | skill_list: Array 10 | ): void => { 11 | const position: Vec2 = entity.get_position(); 12 | 13 | const skill: Skill = new Skill(position.x, position.y + 250, EDirections.LEFT) 14 | .set_animation(AnimationFrames.skills.boomerang) 15 | .set_velocity(-1.0, -1.0) 16 | .set_velocity_incrementer( 17 | random_choice(-0.1, -0.1), 18 | random_choice(-0.1, 0.1) 19 | ) 20 | .set_update_fn( 21 | (self: Skill): void => { 22 | const position: Vec2 = self.get_position(); 23 | const velocity: Vec2 = self.get_velocity(); 24 | const velocity_incrementer: Vec2 = self.get_velocity_incrementer(); 25 | 26 | self.set_position(position.x + velocity.x, position.y + velocity.y); 27 | 28 | if (velocity.y < -8 || velocity.y > 8) 29 | self.set_velocity(velocity.x, (velocity.y *= -1)); 30 | 31 | self.set_velocity( 32 | velocity.x + velocity_incrementer.x, 33 | velocity.y + velocity_incrementer.y 34 | ); 35 | } 36 | ); 37 | 38 | skill_list.push(skill); 39 | }; 40 | -------------------------------------------------------------------------------- /src/skills/createpollen.ts: -------------------------------------------------------------------------------- 1 | import { Entity, EDirections } from "../Entity"; 2 | import { Skill } from "./Skill"; 3 | import { Vec2 } from "../Vec2"; 4 | import { AnimationFrames } from "../Frames"; 5 | import { debounce } from "../Decorators/debounce"; 6 | import { random_choice } from "../Utils/RandomChoice"; 7 | 8 | export const create_pollen = debounce( 9 | (entity: Entity, skill_list: Array): void => { 10 | const position: Vec2 = entity.get_position(); 11 | 12 | const skill: Skill = new Skill( 13 | position.x + 50, 14 | position.y + 250, 15 | EDirections.LEFT 16 | ) 17 | .set_animation(AnimationFrames.skills.pollen) 18 | .set_velocity(-1.0, -1.0) 19 | .set_velocity_incrementer( 20 | random_choice(-0.02, -0.04), 21 | random_choice(-0.04, 0.04) 22 | ) 23 | .set_update_fn( 24 | (self: Skill): void => { 25 | const position: Vec2 = self.get_position(); 26 | const velocity: Vec2 = self.get_velocity(); 27 | const velocity_incrementer: Vec2 = self.get_velocity_incrementer(); 28 | 29 | self 30 | .set_velocity( 31 | velocity.x + velocity_incrementer.x, 32 | velocity.y + velocity_incrementer.y 33 | ) 34 | .set_position( 35 | position.x + velocity.x, 36 | position.y + Math.cos(velocity.y) * 10 37 | ); 38 | } 39 | ); 40 | 41 | skill_list.push(skill); 42 | }, 43 | 1000 44 | ); 45 | -------------------------------------------------------------------------------- /src/skills/createvenus.ts: -------------------------------------------------------------------------------- 1 | import { debounce } from "../Decorators/debounce"; 2 | 3 | import { Entity, EDirections } from "../Entity"; 4 | 5 | import { Vec2 } from "../Vec2"; 6 | 7 | import { Skill } from "./Skill"; 8 | 9 | import { AnimationFrames } from "../Frames"; 10 | 11 | import { random_int } from "../Utils/RandomInt"; 12 | import { random_float } from "../Utils/RandomFloat"; 13 | import { Match } from "../Utils/Match"; 14 | 15 | import { sketch } from "../P5/Index"; 16 | 17 | export const create_venus = debounce( 18 | (target: Entity, skill_list: Array): void => { 19 | const side_of_screen: number = random_int(0, 3); 20 | 21 | const skill_position: Vec2 = Match( 22 | side_of_screen, 23 | [ 24 | 0, 25 | { 26 | x: -50, 27 | y: random_float(-50, sketch.windowHeight + 50) 28 | } 29 | ], 30 | [ 31 | 1, 32 | { 33 | x: random_float(-50, sketch.windowWidth + 50), 34 | y: -50 35 | } 36 | ], 37 | [ 38 | 2, 39 | { 40 | x: sketch.windowWidth + 50, 41 | y: random_float(-50, sketch.windowHeight + 50) 42 | } 43 | ], 44 | [ 45 | 3, 46 | { 47 | x: random_float(-50, sketch.windowWidth + 50), 48 | y: sketch.windowHeight + 50 49 | } 50 | ] 51 | ); 52 | 53 | const skill: Skill = new Skill( 54 | skill_position.x, 55 | skill_position.y, 56 | EDirections.RIGHT 57 | ) 58 | .set_animation(AnimationFrames.skills.venus) 59 | .set_velocity(0, 0.04) 60 | .set_velocity_incrementer(-0.06, 0.06) 61 | .set_update_fn( 62 | (self: Entity): void => { 63 | const target_position: Vec2 = target.get_position(); 64 | 65 | const position: Vec2 = self.get_position(); 66 | 67 | self.set_velocity( 68 | (target_position.x - position.x) * 0.01, 69 | (target_position.y - position.y) * 0.01 70 | ); 71 | 72 | const velocity: Vec2 = self.get_velocity(); 73 | 74 | self.direction = 75 | velocity.x < 0 ? EDirections.RIGHT : EDirections.LEFT; 76 | 77 | self.set_position( 78 | (position.x += velocity.x), 79 | (position.y += velocity.y) 80 | ); 81 | } 82 | ); 83 | 84 | skill_list.push(skill); 85 | }, 86 | 1000 87 | ); 88 | -------------------------------------------------------------------------------- /src/skills/launchseedmissile.ts: -------------------------------------------------------------------------------- 1 | import { Skill } from "./Skill"; 2 | import { AnimationFrames } from "../Frames"; 3 | import { random_int } from "../Utils/RandomInt"; 4 | import { EDirections } from "../Entity"; 5 | import { sketch } from "../P5/Index"; 6 | 7 | export const launch_seed_missile = (skill_list: Array): void => { 8 | const skill: Skill = new Skill( 9 | random_int((sketch.windowWidth * 60) / 100, sketch.windowWidth - 50), 10 | -50, 11 | EDirections.LEFT 12 | ) 13 | .set_animation(AnimationFrames.skills.seed_missile) 14 | .set_velocity(0, 0.04) 15 | .set_velocity_incrementer(-0.06, 0.06); 16 | 17 | skill_list.push(skill); 18 | }; 19 | -------------------------------------------------------------------------------- /src/skills/shootray.ts: -------------------------------------------------------------------------------- 1 | import { Entity, EDirections } from "../Entity"; 2 | import { debounce } from "../Decorators/debounce"; 3 | import { Skill } from "./Skill"; 4 | import { AnimationFrames } from "../Frames"; 5 | import { GameSounds } from "../GameManager/sounds"; 6 | import { Vec2 } from "../Vec2"; 7 | 8 | export const shoot_ray = debounce( 9 | (entity: Entity, skill_list: Array): void => { 10 | const position: Vec2 = entity.get_position(); 11 | 12 | const skill: Skill = new Skill( 13 | entity.direction === EDirections.RIGHT 14 | ? position.x + 125 15 | : position.x - 5, 16 | position.y + 65, 17 | entity.direction 18 | ) 19 | .set_velocity(entity.direction === EDirections.RIGHT ? 5 : -5, 0) 20 | .set_velocity_incrementer( 21 | entity.direction === EDirections.RIGHT ? 0.2 : -0.2, 22 | 0 23 | ) 24 | .set_animation(AnimationFrames.skills.ray) 25 | .set_owned_by_player(true); 26 | 27 | skill_list.push(skill); 28 | GameSounds.cuphead_attack.play(); 29 | }, 30 | 150 31 | ); 32 | -------------------------------------------------------------------------------- /src/skills/skill.ts: -------------------------------------------------------------------------------- 1 | import { Vec2 } from "../Vec2"; 2 | import { Animation } from "../Animation"; 3 | import { EDirections } from "../Entity"; 4 | 5 | export class Skill { 6 | private position: Vec2 = { x: 0, y: 0 }; 7 | private velocity_incrementer: Vec2 = { x: 0, y: 0 }; 8 | private velocity: Vec2 = { x: 0, y: 0 }; 9 | private damage: number = 1; 10 | private animation: Animation; 11 | private owned_by_player: boolean = false; 12 | 13 | public direction: EDirections; 14 | 15 | constructor(x: number, y: number, direction: EDirections) { 16 | this.position.x = x; 17 | this.position.y = y; 18 | this.direction = direction; 19 | } 20 | 21 | public get_damage = () => this.damage; 22 | 23 | public set_owned_by_player = (owned: boolean): Skill => { 24 | this.owned_by_player = owned; 25 | return this; 26 | }; 27 | 28 | public is_owned_by_player = (): boolean => this.owned_by_player; 29 | 30 | public set_animation = (frames: Array): Skill => { 31 | this.animation = new Animation(frames); 32 | return this; 33 | }; 34 | 35 | public get_animation = (): any => this.animation; 36 | 37 | public set_update_fn = (fn: any): Skill => { 38 | this.update = () => fn(this); 39 | return this; 40 | }; 41 | 42 | public update = (): Skill => { 43 | this.position.x += this.velocity.x; 44 | this.position.y += this.velocity.y; 45 | this.velocity.x += this.velocity_incrementer.x; 46 | this.velocity.y += this.velocity_incrementer.y; 47 | 48 | return this; 49 | }; 50 | 51 | public set_velocity = (x: number, y: number): Skill => { 52 | this.velocity = { x, y }; 53 | return this; 54 | }; 55 | 56 | public get_velocity = (): Vec2 => this.velocity; 57 | 58 | public set_velocity_incrementer = (x: number, y: number): Skill => { 59 | this.velocity_incrementer = { x, y }; 60 | return this; 61 | }; 62 | 63 | public get_velocity_incrementer = (): Vec2 => this.velocity_incrementer; 64 | 65 | public set_position = (x: number, y: number): Skill => { 66 | this.position = { x, y }; 67 | return this; 68 | }; 69 | 70 | public get_position = (): Vec2 => this.position; 71 | } 72 | -------------------------------------------------------------------------------- /src/types/global.d.ts: -------------------------------------------------------------------------------- 1 | import module = require("p5"); 2 | import * as p5Global from "p5/global"; 3 | 4 | export = module; 5 | export as namespace p5; 6 | declare global { 7 | interface Window { 8 | p5: typeof module; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/types/maybe.d.ts: -------------------------------------------------------------------------------- 1 | export type Maybe = T | undefined | null; 2 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | body { 7 | width: auto; 8 | height: auto; 9 | } 10 | 11 | #main-container { 12 | margin: 0; 13 | padding: 0; 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | max-height: 100%; 20 | overflow: hidden; 21 | background-color: #fad245; 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | align-items: center; 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "incremental": true /* Enable incremental compilation */, 5 | "target": "es2019" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, 6 | "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | //"allowJs": true /* Allow javascript files to be compiled. */, 9 | //"checkJs": true /* Report errors in .js files. */, 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | "declaration": true /* Generates corresponding '.d.ts' file. */, 12 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 13 | // "sourceMap": true /* Generates corresponding '.map' file. */, 14 | // "outFile": "./build/build.js" /* Concatenate and emit output to single file. */, 15 | "outDir": "./build" /* Redirect output structure to the directory. */, 16 | "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, 17 | // "composite": true, /* Enable project compilation */ 18 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | // "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | 25 | /* Strict Type-Checking Options */ 26 | //"strict": true, /* Enable all strict type-checking options. */ 27 | "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, 28 | "strictNullChecks": true /* Enable strict null checks. */, 29 | "strictFunctionTypes": true /* Enable strict checking of function types. */, 30 | "strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */, 31 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 32 | "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, 33 | "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, 34 | 35 | /* Additional Checks */ 36 | "noUnusedLocals": true /* Report errors on unused locals. */, 37 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 38 | "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, 39 | "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, 40 | 41 | /* Module Resolution Options */ 42 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 43 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 44 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 45 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 46 | // "typeRoots": [], /* List of folders to include type definitions from. */ 47 | // "types": [], /* Type declaration files to be included in compilation. */ 48 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 49 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 52 | 53 | /* Source Map Options */ 54 | //"sourceRoot": "./src/" /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 55 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 56 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 57 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 58 | 59 | /* Experimental Options */ 60 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 61 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 62 | } 63 | } 64 | --------------------------------------------------------------------------------