Git Product home page Git Product logo

twcremake's Introduction

TWCRemake

The Wizards Chronicles remake inside the Godot engine.

The Wizards Chronicles (TWC) is an online mutiplayer game orignally created in 2005 using the BYOND engine/platform.

The goals for this remake are simple, Move the game to a better and more powerful engine, make the game more accessible to a wider range of audiance, introduce new content while improving on the old content and bring back an underrated game back to life.

The Original TWC source code (BYOND) : https://github.com/DuncanFairley/TWC

Godot : https://github.com/godotengine/godot

BYOND : http://www.byond.com/

Discord : https://discord.gg/nNE64jV

twcremake's People

Contributors

maxisjoe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

twcremake's Issues

Some tiles cannot be blended in with it's sorrundings

image

This issue effects some sprites like the fireplace and barrels, this causes an issue where their placement feels unnatural sometimes some sprites like the fireplace do not blend in with the walls as they stick out a couple of pixels out. This is a tilemap node issue.

Need some research done before taking any stupid measures that can make my workflow or whoever comes and works on this very hellish.

RPC cache error/invalid packet, node not found error -> Spells

This is a continuation for #16 where I mainly talk about spells
As of 0629c46 spells still randomly throw out two errors that go like this
image

While in the past few commits I have only made this error not spam or hang the client or server, it's still there and is probably causing issues for something like issue #18 .

I seriously have no idea what the fix for this is but I'll experiment with more solutions later.

In-game times never change. Always day.

During time change checks the Day variable always stays true and never changes, causing all Day and Night nodes to never change their state and always stay in day time.

Improvements to the player character is needed.

A few years back when I started my development on TWCRemake I was still learning Godot and my knowledge of it was pretty limited. As a result, I ended up making a lot of questionable designs that currently make no sense what so ever and will not work at all in the long run especially when we add transformation spells.

The player scene should be a single scene instead of a prefap for multiple playable characters. There doesn't seem to be a lot of work that needs to be done on the coding side so it's just a matter of finding a way to get player.tscn as the only needed scene to load in players and their sprites and attributes.

[0.0.1] Networked Enemies

It's time for us to create our first enemy.
The server should handle all their behavior and spawning and they should be synced across all clients correctly.

What to do when adding enemies :

  • Enemies should award gold and EXP to the player who killed them.
  • Enemies become aggressive when hit by a player OR are in agro range
  • Enemies should NOT be allowed to wander everywhere and should stay near their spawn areas.
  • Disable all enemy behaviors when there is no close players nearby to save on resources.
  • Some enemies should move on a grid unlike the player
  • Add in rats, snakes and pixies.
  • Allow for the rare chance to spawn legendary enemies that are bigger, tougher to kill and might have different behaviors.

Cannot implament a day and night system

Cannot use Light2D or CanvasModulate nodes to create a day and night system

0% progress so far on getting a functioning system

All tests will be made in the WorldTest2 scene

Cannot work on maps until we figure out the day and night issue.

Can this work for Godot 4+ games with multiplayer and open world chunks?

Test chunks link: WithinAmnesia/ARPG#15

I'm trying to find a way to seamless load and unload chunks for a 2D multiplayer game project to make an open world with a working server using Godot 4.2.1.NET.

How can this work for multiplayer and what is needed for this to potentially work? What options can be used for chunk loading and unloading seamlessly in Godot 4.2.1.NET? Please give feedback.

[0.0.1] Player health, death and respawning

At the moment the player is immortal and cannot die, We must change that.

Here's a list of things that needs to be taken care off when working on player deaths :

  • The player's sprites should rotate to simulate them falling on the ground, just like in the original game.
  • The respawn system must be flexible enough to allow for players to change their respawn locations while in events/dueling matches/etc
  • The player's screen should slowly lose color when their health is below 45%. when they're at 0% turn the entire screen black and white
  • Add status effects that cause the player to lose/gain health over time.

[0.0.1] The moving stone walls

I forgot that we should make those lol. In diagon alley there is supposed to be a wall that blocks your way to Tom's bar; when touched it starts moving to allow for other people to access Tom's bar.

Spells change direction when casting a lot of them

To reproduce this issue, spam a spell like inflamari and change where your character is looking.
This will cause some of the projectiles to change direction for some reason.

A possible cause of this is probably that pesky RPC cache error since spell names are not consistent when the console throws out the RPC cache error.

Needs some investigation and work put into it.

RPC cache issues.. again..

I have said it before and I have said it again, I'm not qualified to work on any networking aspects because I have no idea how networking works in Godot no matter how many times I read the docs. It's probably because I'm stupid but let's get to the point

RPC cache issues again, remotesync does not solve this issue like it did back in #9 nor does master do, so this will probably be another problem that will take months for me to solve.
Right now I have created a new branch called "idk-what-imdoing" to keep all my garbage away from the working code that I don't want to get destroyed by my idiocy and I'll be figuring out why, how and when this issue occurs and how to avoid it completely.

Spells are the main target for now but chat also gets this issue from time to time which doesn't make any fucking sense because of how inconsistent it is, there is no pattern for that so I'm not going to fix that fucking shit. I'll focus on the spells first.

Cannot recreate the same FOV effect of the orignal TWC

The original TWC game had the standard way of handling visibility that was provided by the BYOND game engine, this method allowed the walls to be visible but what's behind them isn't visible.

Trying to recreate this using Light2D and LightOccluder2D is impossible as there is no way to easily create a light occluder polygon that doesn't hide the walls themselves and at the same time does not effect performance.

It's clear that Godot's built in solution isn't effective enough and I should probably look for alternative solutions or wait for the new improvements for the 2D renderer for Godot in 4.0 that's coming next year.

FOV is broken on some parts of the maps

This is probably due to the very annoying workflow we have to go through to allow FOV to work. Drawing the walls twice on two layers is annoying and people can easily forget about it when working on more important parts for the maps.

We need a better solution for this otherwise we'll have to re-open this issue over and over again in the future.

[0.0.2] Add in a game tips system

I've noticed that newer and older players will have a difficult time adapting and learning the game's ropes for the first time. Until quests are added we cannot add in a proper tutorial so we'll have to add in a tips system that gives players tips for how to do things in game.

Something is causing data to not sync

I admit, this IS my fault because I haven't been documenting networking code and haven't been keeping the scripts clean. However, my excuse is that I have no idea how to actually get this running and I'm experimenting with several ways to get this working.

Right now my prime suspect is _request_player_info() and once I get things working and understand what's what I'll scrap all the messy code and actually document everything next time. For now players are spawning correctly and everything should work on paper, I just need to find a way to get data synced correctly and fix network master issues.

[0.0.2] Spells overhaul

The current system is very cluncky and isn't as flexible as I'd want. We need a simpler solution for casting all kinds of spells and the hotbar needs to dynamically change based off how much stuff you're using.

Here's a list of things that needs to be done :

  • Clean up the spell casting code and make it simpler but more flexible to allow for all kinds of uses (not just spells)
  • Allow for the hotbar to carry spells and other actions (I.e, eating an item, throwing a potion, etc)
  • The hotbar should allow for all keybinds to be used, not just the numpad.
  • Spells at the moment don't have particles spawning on impact with walls, something that the original TWC had.
  • Allow for spells to be used by other entities that are not players.

Players don't spawn correctly or at all sometimes

This issue is hard to reproduce because it's all up to luck.
This usually comes with a "can't find ID on base dictionary" error and when that error appears the entire server starts to have issues syncing players or spawning them with the correct house/name.

In my experiments the issue isn't game breaking and world_state reports the correct data, so it's only a visual problem as far as I know but I need look for a way to completely prevent this since I don't want the player to encounter invisible players and players with the wrong houses.

[Critical] Seperate level scenes from each other and make world states instanced

Currently all levels are mashed together in one giant world node that gets loaded on start, this causes a lot of pathfinding and memory issues and will cause the world state packets to be large for no reason overtime when we add more things into the game.

Seperating them and adding a proper scene load system would fix the issue we have currently with the game hanging up on startup + mobs having trouble pathfinding.
This will also allow us to stop sending data to players who are not currently inside that scene since the client only has to load the scene relavent to it and will also stop the server from processing areas when there's no players on them.

Scenes should be layered like this on the server:

Global Nodes
-
Ui
-
Worlds
-- DiagonAlly
--- Players
-- Village
--- Players
-- Hogwarts
--- Players

while currently its done like this:

Global Nodes
-- Players
World
-

Issues with exporting the project

Exporting the project to be playable outside the editor is impossible, Godot doesn't export everything which causes the game to not function at all on Main.tscn and crash on MainMenu.tscn

After doing some tests, the "Export all resources in project" function does seem to actually export something since the .exe file gets bigger if you turn on embedded pck.

"Export all scenes" causes the game to not crash after reaching MainMenu.tscn but autoloads are never exported, causing Teleport.gd to never exist and making the exported build throw an error while the player gets stuck on the main menu.

"Export resources", I never even tried going through all the work of checking every single box.. it's too much work and takes a lot of time.. it probably works but I'm sure me or anyone who comes work on this project after me would want to go through the hell of playing cookie clicker but with small check boxes.

Not sure if this is a Godot bug to start with.

Server keeps creating infinte copies of the player while they're on the main menu

While kind of related to #14 , data actually syncs correctly between clients if they meet some conditions. If these conditions are not met the game just lags and tries spawning a lot of copies of a player that still does not exist.

The game has an issue where if two clients connect and stay on the main menu then join the game the game won't really complain that much and will spawn them correctly and won't try spawning them dozens of times.
If a single client joins the server, creates a character, then another client joins the server, the first client tries to spawn a non-existent character that has not been created and the first client will lag to a crawl until the game crashes.

I think the solution is to find a way to detect if a client is still on a main menu or not to prevent this.

[0.0.1] Server browser and online hosting

Since we're almost done with 0.0.1 I think it's a perfect time to stop forcing the game to run only on LAN servers for testing. It's time to let people host the game online and let others join in.

Changing the code to allow for online hosting isn't complicated, but the real challenge comes in adding in an in-game server browser to let other people know that there are online servers and they should join it. I've experimented with this myself and while I did get some things done I had a lot of troubles with Firebase and trying to host server data there. We need another solution to send out a JSON list of all the servers and a way to retrieve them without using Firebase because it's seriously bad (I hate google).

The challenges of this task is the following :

  • Find a service or a way to host JSON data online so we can retrieve and push server data there
  • Overhauling the startup scene to support a server browser (while still allowing people to connect to servers manually)
  • Server settings (such as player limit and server name, server list API keys, etc) should be configurable through a JSON/INI file on the server's local machine.

Can't add the player above the scene he was moved to

func Move_To_Scene(thisscene,nextscene, player,spawnPos):
	call_deferred("Deffered_MoveToScene", thisscene,nextscene, player,spawnPos)
	
func Deffered_MoveToScene(thisscene,nextscene, player,spawnPos):
	var scene = nextscene
	pl = player
	spawnpos = spawnPos
	thisscene.remove_child(player)
	remove_child(player)
	get_tree().change_scene(scene)
	#var newscene = get_tree().current_scene
	get_tree().get_root().add_child(player)
player.position = spawnPos

Can't add the scene on top of the scene he was moved to. at the moment i can only add him inside of the root scene because Godot can't take a reference (for some reason) of the new changed scene.

NPC Base

The NPC base is almost finished, however, A few issues still remain and need to be implemented

What hasn't been finished/Cannot finish or work on :
-NPC Movement
-Shops

What is finished :
-Simple Dialogue system
-Simple NPC awareness

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.