Code Monkey home page Code Monkey logo

no-place-like's Introduction

๐Ÿ‘พ Hello! I'm Kirk, an Open Source Game Developer ๐Ÿ‘พ

I've been creating and publishing my own video games since late 2008 (the days of Flash lol).

Since then I've built a deep fluency developing HTML5 web games using tools such as ES6 JavaScript, CSS3, and frameworks such as PhaserJS. Outside of game dev, I have aquired skills in full stack web development, leveraging tools like ReactJS, Firebase, and many others to create incredible web experiences.

My goal is to find a way to become financially independant, and spend my time creating amazing open source video games full-time! :shipit:

no-place-like's People

Contributors

dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar imgbotapp avatar jay51 avatar saricden avatar tedbigham avatar vocalfan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

no-place-like's Issues

mobile issue (iPhone xS max)

when you load the game in portrait mode and then change to landscape the right half of the screen is black.

If you load the game in landscape mode everything works properly

Fix license

Need to switch to a GNU license. I didn't realise MIT license still has a copyright line with my name. These games are intended to be "copyleft" and therefore I don't think the license should have a copyright clause with my name on it...

But I'm also scared if I were to simply remove the copyright clause from the existing license, would it no longer be valid?

Really I should find a lawyer who can actually explain all the options to me... But I ain't got the monies for that. I'm going with GNU because according to https://choosealicense.com/licenses/gpl-3.0/ GNU is copyleft.

I need to learn more about the history of what we're doing... ๐Ÿ™‡โ€โ™‚๏ธ

Basic dialog system.

[Problem]

Basic text (subtitle style, we'll add voiceovers in the future) dialog system, with generic TextUI class that can be extended for creating menus with various options linking to callbacks.

[Solution]

  1. Give NPCs (eventually base NPC class) a dialog property (object).
  2. Initialize as empty, create an initDialog(dialog) function, which takes a key-value formatted dialog object, and assigns it to dialog property.
  3. Add talkInOrder() and talkRandom() functions to NPCs which start a conversation either at the beginning of the dialog object or at a random key.
  4. In the base Level class, add a new bit of UI for responsive subtitles.
  5. Show and hide responsive subtitle, and fill with lines or questions (dialog object keys).
  6. Time show/hide based on a config property of the line or question.
  7. Questions default to a random answer and skinny timer bar underneath them to indicate how long user has to choose, before default is selected.
  8. Question answers can link to other lines or other questions, OR have an action callback.

Recreate title screen!

We need to make use of our recently discovered word wrapping along with custom fonts to create a cooler UI for the screen.

Also add links to:

  1. This repo, have verbage about game being open source, ie: "View game source." (w/ GitHub logo)
  2. Dev livestream on Twitch.

Angular aim & shoot logic (mouse + multitouch)

We need to get some guns up in here, stat.

Pseudo steps to success:

Images required:

  1. Render MC without arms.
  2. Render arms individually.
  3. Render a test gun, test projectile, and explosion animation.

General MC logic (create):

  1. Match positions + layer arms and gun to MC.
  2. Offset positions so that they fit into place.

Mouse logic (mousedown event):

  1. Calculate the angle between the mouse and the MC.

Multitouch logic (pointer1 & pointer2 .isDown):

  1. Calculate the angle between pointer1 & pointer2.

General MC logic (update loop):

  1. Continually update positions of arms + gun relative to MC.
  2. Rotate arms, and gun to match our given angle.
  3. (If the gun is rapid fire), start shooting automatically.
  4. (If the gun is single shot), just aim, fire on release.

Create "Fight" version of each NPC & an in-field follow & behaviour system

It would be a great feature to talk to NPCs in the game and at some point in the conversation be able to ask them to join your "party", then have them start following you and when you exit the caves together, have them switch from their safezone behaviour to their dangerzone behaviour for lack of better words.

This behaviour could be taking out a weapon (a mercenary or fellow robot-hunter character), or switching into "scavenger" mode (engineer), etc.

The follow mechanics will need to account for jumping as well as running. I'm thinking the simplest solution would be to make the NPC mimic the MC's movement and jump behaviour, offset by the distance between the NPC & MC converted into a time delay... (I hope this will make sense in the future, whether I champion this or someone else).

Generic Gun class

[Problem]

It would be good to have a generic Gun class we can extend from to create new weapons quickly.

[Solution]

  1. Create new Gun class and extend from Container.
  2. Add config key/value properties w/ defaults to constructor(config).
  • Projectile sprite key.
  • Gun sprite key.
  • Gun idle animation key (if applicable, defaults to false).
  • Gun shoot animation key (if applicable, defaults to false).
  • Emitter config (spread operator pass-through).
  • Pistol grip v rifle x shotgun style grip.
  1. Create new property for weapon in MCAfrica constructor config pass in instantiated gun.
  2. Create a switchWeapon(weapon) function on our MCAfrica class.

Enemy drop system

Give enemies a new array of objects in their config, called dropItems: [ ... ].

Each object will contain three keys:

  • probability which is a number between 0 - 1 indicating how rare a drop is
  • multi indicating whether this enemy can occasionally drop multiple items (up to one of each item provided in dropItems)
  • item which is a reference to an item extending Item class (to be made in issue #63)

Abstract MC Africa logic into it's own class

Extend Sprite, or perhaps add another layer of abstraction. Right now all the logic is just mushed inside the AfricaCampScene.js, which is no fun for anyone moving forwards. We need to have a reusable Sprite class for MC Africa. ๐Ÿ˜Ž

Wall run system

Enable players to run up walls briefly, then maybe press jump to do a kickoff!

Idea came about while working on #4.

:shipit: :shipit: :shipit:

Create "onDeath" function for Enemy class

Create a generic onDeath() function in the Enemy class which defaults to the user falling up, then falling head-first down and off the map (similar to how it already falls off the map, currently it's just being set to invisible).

The onDeath() function should be overwritten in the class inheriting from Enemy if custom death behaviour is required for that NPC.

Handle undefined elements in enemy arrays

Right now when we use the destroy() function on enemy sprites, there remains an undefined element in the enemies array, which errors when we try to check for hit tests, etc. etc.

MCAfrica needs to be able to toggle between Fight & Passive variants

[Problem]

We need to consolidate our two different MCAfrica sprite classes into one, and have it automatically switch modes when entering or exiting the cave.

[Solution]

  1. Load both the arms & noarms sprites into the same class extending Container.
  2. Also load the arm images, gun.
  3. Toggle visibility & mode/active state of MCAfrica components (noarms v arms).
  4. Create a y-axis limited range invisible "border" at cave entrance/exit.
  5. Add detection if mc instance is on the left or right side (in cave or out), and switch modes based on that.

Implement weapon engineering system

We're going to implement a feature which leverages the new Item class (#63) and inventory system (#61).

The primary function of this feature is a game mechanic which allows you to mix and match raw materials you find in the field, bring your combinations to our Engineer class (#49). He will then trigger a timer, which forces the user to wait an hour (of in-game time, issue #x), after which time he will have a new weapon created for you based on the materials you bring him.

Potential implementation:

  • 1) Each material instantiation of Item receives a materialStrength property (visible to player), along with a materialType
  • 2) materialStrength can be level 1 - 5
  • 3) materialElement can be 'Fire', 'Water', or 'Electricity' (1 - 3)
  • 4) materialType directly corresponds to the part of the gun it will be transformed into
  • 5) To create a gun, players need to bring one of each of the following to the Engineer: energy source (explosive or electric or others?), pipe/tubing for barrel, grip material.
  • 6) The Engineer will make guns based on the materialStrength of each component (1 - 5) and the element (1 - 3). Each gun will consist of it's projectile system (energy), barrel (pipe/tubing - accuracy), and grip. Each component has a total of 15 possible visual representations (and possible function differences), one for each materialElement at each level of materialStrength.

Inventory system

We're going to need an inventory system once we start implementing the Engineer NPC's gun creating / junk collection logic. Probably grid over list style, or do something totally new (drag and drop, messy knapsack style?).

The first items will be:

  • Junk / materials / components that the small robots drop
  • Guns the engineer creates for us
  • Possibly some fruits that you can shoot down from trees?

Generic enemy class

Right now JumperBot extends Sprite directly, but it would be good to have an extra layer of abstraction between them, such as a generic NPC class which extends from Sprite or Container, and a Enemy class which extends from NPC. JumperBot could then extend enemy, and it would make creating new enemies a breeze.

Gameplay Mechanics Overhaul (Kinda)

Quoted from Twitch stream (thanks ViableClanMember!):

ViableClanMember: for input, what if the whole left half of the screen is 'walk left', whole right is 'walk right' and press both is jump
ViableClanMember: maybe he could auto shoot
ViableClanMember: yeah shoot at closest, 100% hit rate
ViableClanMember: then it'd be more about positioning, tactics, timing
ViableClanMember: upgrade tree to upgrade his gun loads of tiers, tier 8 could be like a gattling gun
ViableClanMember: then shoulder mounted SAM missiles

Further deets:

Translate the primary "fight" gameplay mechanics from a traditional platformer-shooter to more of a platformer-shooter-runner so to speak. Effectively what we're changing is:

  1. MC will auto aim & shoot at nearest enemy.
  2. By bringing material to the Engineer NPC, it's possible to build new and stronger weapons (ultimately dealing more damage).
  3. The touchscreen equivalent of our current "hold-to-charge-jump" mechanic will be to place a second thumb on the touchscreen, hold (like holding the up button), and release after charging ze jump.
  4. Because we're removing the player-controlled aim mechanic, we are free to use the second thumb for โฌ†๏ธ (3).

Give dialog system a nice box

As suggested by hail_26 on Twitch:

"is it possible to put it in a pretty dialogue box, custom font .. fade in out time ..esc to skip ..later"

:shipit:

Highlight speaking NPC somehow

It would be good to have a way to highlight the current NPC who is talking via our dialog system perhaps a tint, a little speech bubble icon beside their head would be pretty good (with a ... animation). Also displaying their name beside their subtitles would be good.

Extendable Item class

Create an Item class that extends Image (or Sprite, if animated), and adds some extra metadata during it's instantiation. So it can have a physics body if instantiated in a Level class, but can also be used in UI (possibly drag n drop bag) w/o physics.

Metadata we're going to track per Item class:

  • Sprite key and animation key (if applicable)
  • Add to physics to just add (physics body || UI mode)
  • Money value in whatever our mid-apocalyptic currency will be
  • Meta info like name, description, etc.
  • isMaterial boolean

If isMaterial: true:

  • Engineering attribute & value (will design system for engineering in future issue)

Engineer NPC class

We need to implement our new engineer dude in code and add him somewhere to the map!

Animate grass blowing in the wind

First "issue" but actually it's an enhancement not a bug lol.

Yeah so for our wonderful blades of grass in our Africa Camp tilemap, plz animate the grass. K thx.

Create a world "entities" property & utility methods to query

Based on our discussion tonight:

medecau: Could you query that object for the entities?
medecau: filter by type... something like give me a list a list of everythin in the world but filter by type == 'enemy'
medecau: you could make this list + filter a method of the world
medecau: then call it from inside the player
PointBlankTed: i usually don't modify phaser properties directly, but i have no problem sticking more data on the phaser objects. especially sprites
medecau: these utility methods will then be available not only to that ONE player but all potential players

Fix black sky....... Again.

Related to #11.
This bug likes to come back just as soon as you get comfortable with your latest fix.
๐Ÿ‘Ž
It's now happening on our latest Level1 map.

Create turrets and other automatic defences at the cave entrance

At the entrance to the caves / safe zone. Create a whole bunch of turrets that will auto aim and shoot down any robots that come near the entrance. It would also be cool to have some kind of alarm trip and switch the MC to fight mode automatically if a robot somehow makes it past all the guns.

npl-map-cave-entrance

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.