[READ-ONLY] Mirror of https://github.com/flo-bit/shadow-shmup. Fun and casual top-down, roguelike shoot 'em up browsergame with shadow elements and colorful neon effects flo-bit.dev/shadow-shmup/
browsergame pixijs rapier2d roguelike shoot-em-up typescript webgame
0

Configure Feed

Select the types of activity you want to include in your feed.

commit

Florian (Aug 3, 2024, 8:59 PM +0200) 29b913dc e1258c49

+72 -27
+43 -16
Readme.md
··· 2 2 3 3 The shadows are coming for you! Can you survive the onslaught? Move with WASD, auto-fires nearest enemy. 4 4 5 + ## sounds 6 + 7 + - gun shooting 8 + - knife sound 9 + - chainsaw sound 10 + 11 + - player getting hit 12 + - enemy getting hit 13 + - player dying 14 + 15 + - enemy shooting 16 + - enemy exploding 17 + - enemy dying 18 + 19 + - collecting coins 20 + - collecting powerup 21 + 22 + - click (selecting upgrade) 23 + - level up 24 + 25 + 5 26 ## TODO 6 27 7 - - [ ] sound effects 8 - - [x] player shooting 28 + - [ ] stats 29 + - [ ] count kills, deaths, damage taken, damage dealt 30 + - [ ] show stats at end of game 31 + - [ ] tutorial 32 + - [ ] move wave counter to top right corner 33 + - [ ] 34 + - [ ] different players 35 + - [ ] different weapons 36 + - [ ] different shapes 37 + - [ ] different stats 38 + - [ ] sound effects (change to own recorded sounds) 39 + - [ ] player shooting 9 40 - [ ] player getting hit 10 41 - [ ] player dying 11 42 - [ ] enemy getting hit 12 43 - [ ] enemy shooting 13 44 - [ ] enemy dying 14 45 - [ ] special effects 15 - - [ ] player getting hit (flash screen -> change to something else) 16 - - [ ] player upgrades (all upgrades use potions, and have one positive and one negative effect) 17 - - weapon fire rate 18 - - weapon shooting distance 46 + - [ ] player getting hit (red vignette) 47 + - [x] player upgrades 48 + - [x] weapon fire rate 49 + - [x] weapon shooting distance 19 50 20 - - bullet speed 21 - - bullet damage 22 - - bullet piercing 51 + - [x] bullet speed 52 + - [x] bullet damage 53 + - [x] bullet piercing 23 54 24 - - movement speed 25 - - player health 55 + - [x] movement speed 56 + - [x] player health 26 57 - items stay longer 27 58 - [ ] powerups 28 59 - [ ] randomly spawn (with some chance in each cell) ··· 38 69 - [ ] items stay as long as powerup is active 39 70 - [ ] item magnet 40 71 - [ ] get all items 41 - - [ ] enemy upgrades (some enemies are upgraded every wave) 72 + - [x] enemy upgrades (some enemies are upgraded every wave) 42 73 - damage 43 74 - speed 44 75 - health ··· 46 77 - bullet speed 47 78 - bullet count 48 79 - fire rate 49 - - [ ] stats 50 - - [ ] count kills, deaths, damage taken, damage dealt 51 - - [ ] show stats at end of game 52 - - [ ] tutorial 53 80 - weapons 54 81 - recoil on player 55 82 - [x] impulse on bullet impact (done for enemies)
+2 -2
vite.config.js
··· 7 7 build: { 8 8 target: 'esnext' 9 9 }, 10 - base: '/shadow-shmup/' // for github deployment 11 - //base: '' // for itch.io deployment 10 + //base: '/shadow-shmup/' // for github deployment 11 + base: '' // for itch.io deployment 12 12 });
+6 -9
src/app.ts
··· 5 5 import { RAPIER } from './rapier.js'; 6 6 import ParticleSystem from './particles.js'; 7 7 import { Projectile } from './projectile.js'; 8 - import Enemy, { CrossEnemy } from './enemy.js'; 8 + import Enemy from './enemy.js'; 9 9 10 10 import Stats from 'stats.js'; 11 11 12 - import { AdvancedBloomFilter, OldFilmFilter } from 'pixi-filters'; 12 + import { AdvancedBloomFilter } from 'pixi-filters'; 13 13 import PlayerManager from './player-manager.js'; 14 14 import ProjectileManager, { ProjectileData } from './projectile-manager.js'; 15 15 ··· 21 21 import { ItemManager } from './item-manager.js'; 22 22 import { LightManager } from './light-manager.js'; 23 23 import { createNoiseSprite } from './helper.js'; 24 - import { addUpgradeOption } from './upgrades.js'; 25 24 import { UpgradeManager } from './upgrade-manager.js'; 26 - import { BallWeapon } from './weapons/ball.js'; 27 25 import { Weapon } from './weapons/weapon.js'; 28 26 29 27 export default class Game { ··· 62 60 paused: boolean = false; 63 61 64 62 controls: Controls; 63 + 64 + scaleMultiplier: number = 1; 65 65 66 66 scale: number = 1; 67 67 ··· 165 165 this.mainContainer.position.set(window.innerWidth / 2, window.innerHeight / 2); 166 166 // scale the container 167 167 this.scale = Math.min(window.innerWidth / this.minWidth, window.innerHeight / this.minHeight); 168 - this.mainContainer.scale.set(this.scale); 168 + this.mainContainer.scale.set(this.scale * this.scaleMultiplier); 169 169 170 170 // add a resize event listener 171 171 window.addEventListener('resize', () => { ··· 173 173 174 174 this.mainContainer.position.set(window.innerWidth / 2, window.innerHeight / 2); 175 175 this.scale = Math.min(window.innerWidth / this.minWidth, window.innerHeight / this.minHeight); 176 - this.mainContainer.scale.set(this.scale); 176 + this.mainContainer.scale.set(this.scale * this.scaleMultiplier); 177 177 }); 178 178 179 179 let noise = createNoiseSprite(2000, 2000); ··· 212 212 213 213 this.container.x += (position.x - this.container.x) * interpolationFactor; 214 214 this.container.y += (position.y - this.container.y) * interpolationFactor; 215 - 216 - // this.container.x = position.x; 217 - // this.container.y = position.y; 218 215 } 219 216 220 217 if (this.stats) this.stats.end();
+21
src/wave.ts
··· 562 562 ], 563 563 startDelay: 3, 564 564 neededItems: 100000 565 + }, // wave 15 566 + { 567 + enemies: [ 568 + { 569 + type: SphereEnemy, 570 + spawnRate: 8, 571 + upgradeFunction: (enemy) => {} 572 + }, 573 + { 574 + type: TriangleEnemy, 575 + spawnRate: 8, 576 + upgradeFunction: (enemy) => {} 577 + }, 578 + { 579 + type: PentagonEnemy, 580 + spawnRate: 8, 581 + upgradeFunction: (enemy) => {} 582 + } 583 + ], 584 + startDelay: 3, 585 + neededItems: 1000000000 565 586 } 566 587 ];