arcanorum / rogueworld Goto Github PK
View Code? Open in Web Editor NEWEverything for the game Rogueworld.
Home Page: https://test.rogueworld.io/
License: MIT License
Everything for the game Rogueworld.
Home Page: https://test.rogueworld.io/
License: MIT License
Category:
Feature description
Arrows that can be created with explosive tips that causes AOE damage when they hit something.
Category:
Feature description
Add a chatting icon above a player when they are typing out a chat message, so other players can see when they should stop to wait for someone to finish what they are typing. Currently you can't tell if someone is typing something or is AFK.
Currently there is a problem in that browser caches often get in the way of users getting the correct version of the client for the current version of the game, resulting in missing or incorrect textures, missing text/translations, and generally buggy behavior.
The game server itself can be used to serve the client files, instead of them being served over the current CDN, by using Express which I can have more control over regarding caching, and also so I don't have to separately update the FTP server with the latest client code, as the client code payload is less than 30 MB, which can be optimised further.
Add a particle emitter that will fire when a player levels up a stat.
Need to add some new particle sprites to use for the particle emitter. A few different brightly coloured celebration effects.
Existing damage blood splatter effect. Add some new ones here:
https://github.com/Arcanorum/dungeonz/tree/master/client/src/assets/images/gui/particles
Create a new particle emitter. The damage one, that can basically be copied:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/game/Game.js#L208
How the particles are actually emitted:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/network/websocket_events/Entity.js#L193
Needs another one that uses the new emitter adding to the stat level gained event:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/network/websocket_events/PlayerValues.js#L77
AC: When the player moves, a muffled footstep/running sound should play for that player.
Hints:
Main logic for when the player moves:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/websocket_events/Entity.js#L59
Category:
Feature description
It would be nice to have a leaderboard that shows various stats of how good individual players are at certain things.
This would be a web page (i.e. dungeonz.io/highscores) for viewing the highest scores for various activities, such as fastest dungeon completion time, highest exp in each stat, most of a creature killed, etc.
It would also have a player search, to view the stats of a particular player.
Category:
Feature description
It would be interesting if there were signposts around the game world that players could inspect to get information about the surrounding area, or a view of a section of the map.
This would be a better balance of giving people useful info and not distracting from the environment, and to not have to open the entire world map to find where you are if lost.
Signposts would be clickable (highlighted like crafting stations when near) and would open a modal when clicked to show the local info.
Perhaps what they show could be more detailed than the world map, i.e. shop types, dungeon entrance locations, rare resource node locations.
Some basic steps have been taken towards about adding audio to the game so far. Hopefully this much has become apparent after trying the game and getting a feel for the theme and pace.
Audio tasks backlog: https://github.com/Arcanorum/dungeonz/issues?q=is%3Aissue+is%3Aopen+label%3Aaudio
This is where I do most of the tracking/organisation of tasks that need to be done, and to show what can be started by anyone looking for something to pick up. Suggest anything you think needs to be added.
I try to provide whatever details I can about what is needed for each task, but can only do as much as my limited subject matter knowledge allows, which is mostly technical implementation.
Some kind of direction needs to be established for where to take the audio, as that is something that I am very inexperienced with, and will need to defer to others to provide a clearer direction to follow so other people have an idea of what is expected/somewhere to start.
The main areas that need covering are:
Phaser is used on the client for audio playback.
Examples of how audio playback in Phaser works for those technically inclined: https://phaser.io/examples/v3/category/audio/web-audio
The main constraint for the game is audio files, which usually make up a huge portion of the total download size of a typical game. Dungeonz is browser based and as such user expectation for page load times is typically quite demanding. There are techniques than can be used to load large assets like audio after the initial game load, but even then, they should still finish loading quickly and be ready for use ideally before they needed, but this is more of a technical problem to be looked at outside of the scope of this page.
Effects/foley aren't usually a big deal, as they are typically very short (under a second).
Longer music pieces are the main thing that will need to be constrained. The ideal music would be short, easily loopable, and not too prominent/distracting, so that other audio prompts that carry information/alerts to the user are the priority.
The expected format for all audio files is currently WAV or FLAC, and then converted to both Ogg and MP3 format to be loaded into the game.
Ogg tend to result in smaller file sizes, but Safari doesn't support Ogg, so MP3 needs to be provided as a fallback.
The WAV or FLAC (or other high quality/lossess format) versions are used as the original source for the Ogg and MP3 ones to be generated from.
Actual assets ready to be added to the game can be delivered either:
I haven't explored much so far so it is still subject to finding what other people think would be suitable. To be refined as a clearer direction is decided.
RuneScape/OSRS is a large inspiration for the game in general, as well as other old-school style games of the era like Ultima Online. Well known for it's simple, quirky and catchy orchestral MIDI themes.
https://www.youtube.com/watch?v=QSkvyG3H_KM&list=PUTbjYz7d3AZgos7ALYvkvLQ&index=5
Anything on the Dungeon Synth Archives YT channel. A lot of music there that I often play in the background for inspiration while working.
https://www.youtube.com/c/TheDungeonSynthArchives/
ROTMG. It is a bit dead since Flash died, but there are plenty of gameplay videos floating around. This is the general vibe that I intended for the dungeon content, being more intense than anything found on the overworld, though not as fast paced/frantic.
https://www.realmofthemadgod.com/
https://www.youtube.com/watch?v=VOcS3gNnrMY
A very nice and extensive pack of tunes, many of which I think might fit well with the game. There is a lot of stuff in there so I'll go through and select some examples at some point.
https://opengameart.org/content/50-midi-tunes
Super Dungeon Flash, a game I made that this game is a spiritual successor to, that does have most audio in place. The pace of that game is a lot faster and more intense than what is needed here, but a point in the right direction, especially for the dungeon content. https://waywardworlds.com/games/sdf/
I'm open to whatever discussion/ideas people may have (here on GitHub, Discord, Reddit, where ever), and the actual community members on the Discord server who play the game probably have a better idea in their heads of what they expect to hear while playing than me, and are usually fairly talkative and give a lot of feedback, as anything done here for the game is not to impress or please me, but for the actual players.
You should also have expectations of what you decide to pick up, in terms of how well it is defined. I try to make some kind of workable unit of expectations for each task that I add to the backlog list, so if something would benefit from any more info then don't be afraid to ask for it to be added. I don't like working to vague requirements, and image you don't either, so ask for whatever clarification you think you need to be able to be more effective at whatever you are doing.
Will need to add some kind of entity taxonomy configuration system to entities that is available on the client, to play the appropriate death sound.
The way every item type should have a corresponding pickup entity is becoming unmaintainable and a nuisance to have to do when adding many items.
Make each item class be responsible for creating it's own pickup, or at least have the pickup in the same file.
This was originally done so that there could be special interactions for certain pickups, but so far all pickups are functionally identical.
The game doesn't fill the available space when iframed on portal sites, such as iogames.space.
The game canvas should resize to the window size (i.e. the iframe size).
Getting weird CORS errors. First time I have noticed this since the upgrade to Phaser 3.
I asked in the Phaser discord and a contributor there didn't see what could be causing it, or that it is related to Phaser as such. They assume it must be a problem during boot because of the CORS error above.
Can still move around and do things in the game, but only within the initial 100x100px canvas.
Need to figure out and implement a way to associate playing certain sounds with an entity on screen, and adjust the volume to be appropriate for the distance from the player.
Some discussion around the topic.
https://phaser.discourse.group/t/sound-in-particular-place/2547/2
Add an option to the bottom right settings list, that can be toggled on/off. This is the start of a set of debug utilities that will be added later (network latency, error log).
There is already a FPS text feature added, but it only works in dev mode when testing on localhost. This needs changing to be shown when ever the user wants.
AC: An option should appear in the bottom right settings list above all of the other options, that shows an bug icon (for debug mode), something similar to https://fontawesome.com/icons/bug but similar in style to the other settings icons.
AC: When the debug mode icon is pressed, the debug mode setting should be enabled, and the FPS counter text should show in the bottom right.
AC: The debug mode setting icon should show with the other setting icons when the settings list is hidden.
AC: The debug mode setting icon should hide with the other setting icons when the settings list is hidden.
Hints:
dungeonz.debugEnabled
adding to the list:I would like to move the very unwieldy GUI setup to use a proper front-end framework, such as Angular or React (or other?), as it is a bit of a pain for me to maintain the GUI using raw HTML and JS.
An ambient music track to play for players in the main city area.
Something I thought fit the (mostly) peaceful, yet somewhat active, city vibe, or more specifically the inn/tavern near to the city centre. https://youtu.be/1vQvEerAnUI?t=383
Sort of how I imagine the city to look from ground perspective.
https://cdnb.artstation.com/p/marketplace/presentation_assets/000/120/577/large/file.jpg?1554224764
A prompt when the user goes to close the tab that will confirm if they meant to do that, to avoid accidental misclick closing the game, and should inform them that they can create an account if they haven't done so already.
AC: If the user is not playing with an account, the "Create account" panel should be shown when a user event tries to close the page (x button, ctrl + W)
I haven't tested the game at all on Safari as I don't have any devices for Safari, and no emulator exists for other OSes.
Have had to just rely on them applying the same standards that I use when deving for Chrome.
Needs a proper testing pass though Safari to find and fix styling inconsistencies across browsers, or change CSS tooling to something that takes care of compatibility automatically (Tailwind CSS)?
"When you complete some quests, you will, after some time, have 2 quests about kiling rats
You can do only one of the 2, and the other won't complete even if you kill all the rats of the map
This is minor, but problem is that it can just take over all your quests..." -Pigeon
Category:
Feature description
While the current font "Press Start 2P" is aesthetically fitting for the game, it can be hard to read for some players, and some players might prefer larger (or smaller) text.
Settings could be added to allow a user to change the font in-game text is rendered with, and also change the size, to something more basic.
Currently there is no way for contributors to submit their own changes to the main overworld map, as I need to be able to check that nothing sinister has been done to the map as part of any changes that are made to it, such as game-breaking item/creature spawners being added or essential paths being blocked.
Making changes to the map involves submitting the whole map for approval, which given it's size is impractical for me to check the whole map to make sure that the submitter is telling the truth about what changes they have made.
Changes to the overworld basically involves someone telling me what they want to change, and me making those changes myself on their behalf.
Solutions to this problem may involve:
The fire staffs shoot a fire projectile, but it looks a bit crappy and odd from the rest of the game. Could do with a new one making, with an animation.
Possible a particle emitter can be added to this kind of projectile too, for some trailing effects as it moves.
Current sprite https://github.com/Arcanorum/dungeonz/blob/master/client/assets/img/entities/projectiles/proj-fire.png
A commonly requested feature is a persistent, and ideally global, way of chatting with other players.
This is a standard feature for MMO games and has been implemented a million times so nothing too radical is expected here.
Basic summary:
A way to communicate with other players over longer distances, and have messages remain viewable for longer in a chat log. Currently it is annoying to have to quickly read someones message, or miss some what what they said and they need to type it again, or have to keep opening another app like Discord to have a better chat experience.
Basically channels/topics/categories for messages.
Local: Nearby players within view range.
Global: All players across all maps.
Trade: All players across all maps.
Guild: Guild members only. (Future, not for right now)
A chat log/history of previous messages is not needed to be kept on the server. Only messages that a client receives after they join the game will be what they can see and scroll back through.
A limit for the amount of messages kept in the client message history will be needed, after which the oldest messages will be popped off as new ones are received.
Players/bots that spam messages will show up at some point, so a limit of how many messages a client can send in a given time will be needed e.g. 15 messages per minute, after which they must wait a few seconds to chat again. Higher limit = Allows more messages in the same amount of time.
This limit should be server configurable for each chat scope.
I think censoring profanity is usually a pointless battle to try and fight. People always find creative ways of getting around filters, and those filters often just annoy everyone else. I know of games with strict filters to the point that common words get filtered, such as "assassin" censored for containing "ass", "knight" censored for containing "nig", etc.
I wouldn't want to remove the freedom of being able to say "Oh shit!" when realising you made it out of a dungeon with 1HP left.
There are 2 viable solutions:
A generic background loop for any dungeons that do not have a specific one to use.
Should be appropriate for dingy underground themed dungeons, which is most of them.
You used to be able to pick up items by right clicking. This hasn't worked since the upgrade to Phaser 3. Might just be a right click event missing/renamed somewhere.
Possibly can be split to different sounds based on item type (clothing vs weapon).
AC: When the player equips an item of clothing (armour, robes, cloak, etc.), an equip sound should play for that player.
Hints:
There are already separate events for equipping and unequipping each item category that can be used:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/websocket_events/Inventory.js
"Bug with enthralled zombies: when one enters a portal (for example to vampire island), one's zombie thralls do not follow. The weird thing is, the zombies are not even there when you immediately come back through the portal to where you came from" -et
A new creature type is to be added to the game for an upcoming update, the berserker.
It will be a variant of the basic human warrior, but with the armour restyled to a more red colour, and with larger horns on the helmet than the warrior, and the armour covers more of the body.
Recommended to look at the agonite armour task first: #66
Berserkers are more aggressive than the warrior, and attack more often as their health decreases.
Their armour reskin is to showcase the new metal item category, Agonite, that will also come with the same update.
Warrior sprites: https://github.com/Arcanorum/dungeonz/tree/master/client/src/assets/images/entities/characters/warrior
Similar concept art
https://i.pinimg.com/originals/04/1b/33/041b335c498b98e0da20012f3a3b65a7.jpg
Uses a tower style shield, but with pointed top and bottom edges
https://upload.wikimedia.org/wikipedia/commons/6/64/Ag-obj-5959-001-pub-large.jpg
https://www.stainedglassexpress.com/var/images/product/300.300/84023.jpg
The code for this creature is already in place using the warrior sprites. Just needs new new assets to use.
Possibly can be split to different sounds based on item type (solids vs liquids)
Category:
Feature description
A way to enhance an attack (projectile/melee) by adding an additional effect to it.
When equipped, adds an effect to each attack of another item.
i.e. attack using iron sword with fire runestone equipped, makes what the iron sword hits start burning.
Adds another item type "runestone" to the equippable item types (weapon, armour, ammunition).
Adds an additional layer of depth to existing items and makes other items that might not be considered valuable more useful in some situations.
Possibly dropped as boss only rewards.
Category:
Feature description
It would be interesting if while certain items are equipped they would extend the normal range around your character while in darkness.
i.e. holding a fire staff, book of light
"making a Shuriken does not give any Weaponry exp" -et
The crafting recipe for the shuriken item incorrectly gives toolery exp instead of weaponry exp.
There is a class config for mobs that will make them only spawn at certain times of day that needs to be added to Bat.js in server.
See any of the adumbral mob classes for how it looks there.
Bat.prototype.spawnableDayPhases = {
[DayPhases.Dusk]: true,
[DayPhases.Night]: true,
};
A new metal armour type is to be added in an upcoming update: Agonite.
Made of a red metal, higher tier than iron, lower than dungium.
It will be a variant of the basic iron armour, but with the armour restyled to a more red colour, and with larger horns on the helmet than the warrior, and the armour covers more of the body.
This is largely a lot of the same work for the berserker task: #65
Can just do this one and lay it over the base human character animation to create the berserker.
You will probably want the base human sprites to use as a guide for what it would look like when equipped by a player, as clothing items are just sprites layered over the top of the player sprite, matching the frame of the player animation.
Iron armour sprites: https://github.com/Arcanorum/dungeonz/tree/master/client/src/assets/images/entities/clothes/iron%20armour
Human base sprites: https://github.com/Arcanorum/dungeonz/tree/master/client/src/assets/images/entities/characters/human%20base
Describe the bug
The infamous duplicate/inactive player bug. Sometimes when a player attempts joins the game, they will encounter an error that will cause them to restart their connection to the game, but a player entity for them has already been created for them the first attempt, so when they join on the second connection, they have another player entity for them is created, so now there are 2 at once for once player. The player only controls the latter one.
I have tried several times to track down what is causing this to no avail.
To Reproduce
The main problem is that there is no clear reproduction criteria. I have only ever seen it happen in the live game, never during development/testing.
Expected behavior
That a player joins the game and no matter what, a player entity only exists for a single player client connection.
Category:
Feature description
With the changes involved with the items rework #30 there is a also a need to change how crafting works. With the ability to carry many more types of items at more granular quantities,
The current crafting system while more perhaps more interesting than just "Get x items, go to crafting station, then click craft" is kind of annoying for any more complex items (such as armour, need to make 5 bars, then 5 rods, then 5 sheets, then combine them all...) and is limiting in terms of the combinations of items that can be included in the recipe ingredients at 5 max.
The crafting process itself isn't particularly fun and not what the core of the game is about, so this proposal is to make crafting simpler and faster and more like a generic video game crafting system, but with more ingredients of more exotic types required to put more emphasis on world exploration and gathering those ingredients by doing more fun activities.
Phaser 2/C.E. is pretty old at this point.
Phaser 3 has some interesting features that would be nice to have, such as multi-camera views for a mini-map, and rendering performance improvements.
Phaser 4 is in development and will be written in TypeScript, which is what I would also like to move towards for the rest of the codebase at some point.
When a creature goes outside of the player view bounds, it is destroyed, which is also causing the death effect of spraying a bunch of damage particles from the point the entity was destroyed.
Need some check in the Character destroy event for if the entity was actually killed or not.
Hint:
https://github.com/Arcanorum/dungeonz/blob/master/client/src/entities/characters/Character.js#L56
Category:
Feature description
Many times players ask for more inventory slots. This is not an unreasonable request, but I don't think people will be satisfied until they can carry most items at once, so they would just keep asking for more and more slots in the future, and I think it gets away from the real problem; You often want to have options available to you for whatever you are doing, and it is kind of annoying to need to keep going to the bank to get access to what you want.
I think items and crafting can be improved by changing from a set 10 slot limit in the inventory bar, to a "bag" type system where you can store as many items as you want, but each item would have a weight, and you can only carry so much weight.
For example, with a carry weight limit of 100, and if an individual item, i.e. iron ore, weighs 2, then you can carry 50 iron ores at once. If one iron hammer weighs 20, you can carry 5 of them.
This would separate the kind of item from how many items you can carry, as currently you can only carry the same amount no matter what it is, i.e. carry 10 cotton, or 10 noctis armours, even though they have vastly different values.
This would make resource gathering less annoying, as currently you can only gather 10 resources per trip (also assuming you dropped/destroyed your pickaxe too).
The problem with being able to hold so many different kind of items at once (if each type of item has a weight of 1 with a max weight of 100, you could carry 100 different kinds of items), is that it hard to present that on the UI cleanly. So, this main "bag" where you can access all of your items, would be accompanied by a "hotbar" (which would be the current main inventory slots bar) for quick access to items in your inventory. You can add items from your bag to the hotbar and select/use them from there.
Notes
This would be similar to how the inventory and item carrying works in The Elder Scrolls games.
Category:
Feature description
It would be nice for necromancers if the corpses of creatures did not despawn in dungeon instances, so there is more chance to use them if wanted, like how item pickups don't despawn in dungeon instances.
Other tree types giving invalid resources (spruce logs).
I think this was partially implemented new wood type that got cut from the last update, and some trees are giving a resource that doesn't have the assets added for it yet.
Can just wait until that content is finished and added.
Different pages/sheets could be added to each workbook so that the list doesn't have to scroll down as far, with each page being for a category.
This can be done by just duplicating the current spreadsheet, renaming the new one, and removing anything that is not for that category.
Needed sheets:
Anything that only shows on a panel, tooltip, warning, buttons, etc.
Item names and descriptions.
Mobs and other named interactable objects.
Stat names and descriptions
Task names/descriptions.
Category:
Feature description
Cooking: A new stat and set of items to gather, craft and consume.
Used to create food items. Food items will offer much longer duration effects (hours?) that are mainly for non-combat bonuses, such as increased exp gain rate, increased gathering rate, temporary stat boosts.
This allows them to be distinct from potions, which are about short term immediate effects for dealing with a particular problem, and require more deliberate use. Food would act as a passive complement to whatever you are doing.
This gives a meaningful reason to add more types of animals and plants to gather ingredients from, to increase the game's item and creature catalogue.
Add some entity spawners to the vampire island, that will spawn large adumbrals, generally in the more empty areas.
Category:
Feature description
Some dungeons are too easy, and with not good enough rewards.
An interesting way to add extra challenge without just making enemies stronger would be to limit the players options for how to approach the enemies.
Hard mode:
This would encourage players to
Perhaps this mode would give some exclusive rewards on completion.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.