Coder Social home page Coder Social logo

newwby / puppy_time_police-prealpha Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 55.39 MB

My submission for the June 2021 '1 Game a Month' game jam, and an anniversary gift for my partner.

GDScript 98.00% GAP 2.00%
video-game game gamejam-2021 gamejam onegameamonth

puppy_time_police-prealpha's People

Contributors

newwby avatar

Watchers

 avatar

puppy_time_police-prealpha's Issues

unused art assets

unused art assets included in repo, need identifying and removing

rewrite script data store as json

weapon style data is currently held inside a gdscript file
should be rewritten into a json file, and logic added to interpret on game load, so it can be externally edited

collision shapes and extents for weapon style data

weapon style data does not include collision extent data for alternatively shaped projectiles
this can be seen when utilising the disabled 'bolt lance' weapon, the hitbox does not match the sprite because the default projectile hitbox is expecting a circular

proposed solution is to define two separate properties in the weapon style data

  1. what collision shape to set the hitbox to
  2. vec2 of extents for the collision shape

ideally can set these automatically by getting sprite dimensions or an intended sprite size value (see issue #19 'projectile sprites should utilise sprite scaling function')

enemy projectile colour override

would be nice if could colour code enemy projectiles; I.e. red piercing, green homing, blue basic etc
player is able to easily identify projectiles of different types

may be irrelevant if utilising weapon nodes on foe

state_manager and class_state check_state signal conflict

signal conflict for 'check_state' signal
have been unable to recreate recently

review both node_state_manager.gd and class_state.gd
conflict with check_state signals
one is redundant, identify said signal and remove
(if mistaken, refactor the least used)

review state_attack wait timer vars

state_attack // base variables
are state_attack wait timers still in use by enemy parent?
review code
if not, remove defunct variables
if so, tie their calculation to parent reaction gamestat

implement intelligent AudioController class

AudioController to replace 2dAudioStreamer (extend)
functionality:
/# controlling multiple audio nodes and audio resources
/# controlling subtitles, playing and stopping,
/# selecting random sounds from audioArray

no enemy-unique weapon node call

enemy class creates fake current_mouse_target & firing_target vectors to satisfy weapon node requirements
rewrite weapon node to be properly extensible by class_enemy.gd

weapon node should convert class_player.gd args to weapon node args
current behaviour is to use player args as weapon node args and give enemy args at time of call as though it was a player
instead player args and enemy args should be passed to weapon node and converted as appropriate

implement full wave spawn handler

class WaveSpawnHandler needs to be reviewed and rewritten to handle area based enemy spawn handling
current implementation is a placeholder

see 'check_enemy_count' func in WaveSpawnHandler on enemy_defeated signal from class_enemy.gd for behaviour, then build from there

functionality should include:

  • number of enemies in wave (size of wave comp array)
  • wave composition (enemy classes)
  • auto-built wave-complete-on-defeated-enemy-count (size of spawn)
  • multiple waves
  • wave spawning locations (different pos2d passed by worldenvironment master)
  • spawn delay between area entry/wave complete and wave start
  • spawn delay variability (slight, for visual)

out of bounds p_line error

reproduce by bringing debug window into focus whilst game is windowed
error -> 'scene/gui/text_edit.cpp:5742 - Index p_line = 204 is out of bounds (text.size() = 201)'
may be a godot bug, check known issues

projectile velocity slow relative to player

player can keep pace with some of the slower projectiles
thinking will increase all projectile speeds
slightly slow the player (they can evade enemy shots too easily as is)
and implement a movement slowdown whilst holding the fire button (player only)

projectile parent handler node

projectiles currently are not handled by any specific node, instead being applied to the root viewport
potential issue, and certainly messy during debugging
create node2d handler for newly spawned projectiles

implement enemy weapon range checks

weapon data script includes values for minimum and maximum range (DataType.AI_MIN_USE_RANGE and DataType.AI_MAX_USE_RANGE respectively) groups, to prevent weapon and targeting logic being called at incorrect times
these are not currently implemented and should be before attempting new enemy types

review incorrect segment timer use time expiry

Certain weapon styles have incorrect expiry rates for their respective segment timers in the UI

approx ratio est. 33%
Reproduce by switching to sniper shot or triple burst shot (review others but these two are confirmed)
Investigate if due to standing shot speed buff legacy code

enemy weapon range improvements

linked issue for #11 (now closed but could use some future work)

potential issues if maximum approach distance is bigger than maximum fire range
either:

  1. add handling for reversing movement velocity once beyond minimum fire range
  2. or automatically restrict approach distance by minimum weapon range

additionally there is a problem with lag when console logging
enemies should check less frequently when they are allowed to fire
previously attempted a fix but encountered a problem with enemy targeting line refocusing on moving players (likely due to check_state func sneaking through a bunch of calls to state_action that it shouldn't have)

review orbital handling logic

see [weapon_ability.gd // func cleanup_orbital_node_holders]
band-aid fix, run function only if no projectile spawned recently
long term orbital handling logic needs rewrite

track_and_move_toward_target called before state is set

in state_hunting.gd (child of state manager) the function track_and_move_toward_target is called before state is set; could add logic to yield processing until readied, or ignore if state isn't set, but may result in undesired behaviour. Instead try reproduce and isolate case where this occurs.
currently no information on reproduction

sniper shot targeting line discrepancy on first shot

to reproduce - on switching to sniper shot (from another weapon style), the actor's targeting line fixes toward mouse cursor point at time of acquiring shot, whilst attacking direction behaves as normal (toward mouse cursor location at time of attack input)

could resolve by applying target line function on gaining sniper shot?

add object pooling for projectiles

with excessive projectiles creating and freeing scenes on call may become demanding of the player
monitor performance for now, may be a future issue, but consider implementing an object pool for projectiles later

implement gamestat class

implement gamestat class which returns calculation when called (accounting for modifier class variables)

make sure is only called on instantiation and change, updating a local variable
i.e. don't perform calculations every time

implement orbital and radar projectile child classes

instead of including different behaviour within the class_projectile.gd code block, implement a parent projectile class and basic projectile child class, along with orbiting projectile child class and radar projectile child class
would simplify code block and make it extensible in future

projectile rotation toward target bug

bug - projectiles are not currently following correct cursor->target vector, angling at seemingly random orientations
offset/projectile rotation code has been expunged (utilising constantly rotating circular projectiles instead) but would be interested in reintroducing once behaviour can be reproduced reliably

see how targeting lines and cursor are oriented for correction - may be a sprite issue also

//apply base sprite_rotate to get pointed angle
/new_projectile.rotation_degrees = 90
var offset = owner.position - owner.firing_target
var offset = owner.firing_target - owner.position
new_projectile.rotation -= offset.angle();
/

change aim wait time to on_instantiation, rather than on_call

store wait aiming time randomisation on instantiation of enemy node, don't call it every time
perhaps include call to re-random at opportune times
just don't call globalfunc.returnrandrange every time due to otp randomisation call
(perhaps utilise standardised randrange func?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.