Jump to content
Search In
  • More options...
Find results that contain...
Find results in...


  • Content Count

  • Joined

  • Last visited

  • Days Won


Spirited last won the day on March 25

Spirited had the most liked content!

Community Reputation

31 Excellent


About Spirited

  • Rank
  • Birthday December 18


Recent Profile Visitors

966 profile views
  1. Spirited

    Comet - Open Source Conquer Online Server

    That should say "open the top directory in Visual Studio Code". I'll modify that part of the readme. I kind of expected that people know how to use dotnet. Normally, open source projects don't really teach you how to use a language, they teach you how to configure the project. I'll try and incorporate as much of your feedback as I can into the readme, but just keep that in mind.
  2. Spirited

    Tasks in Golang

    Yeah, I mean, I suppose it's a bit inspired by C# Tasks, but the name of the package is "tasks" because it's shorter than "saferoutines" or "routines". All this package does is create a panic-safe wrapper around goroutines and integrate a method of waiting. I want to also add a method for cancelling tasks using the context package, but I haven't gotten around to doing that.
  3. Spirited

    Chimera: Conquer Online Private Server Project

    This isn't exactly something I've completely flushed out yet, but it could be the resources in use such as CPU and RAM, could be the amount of players connected to a server. Whatever the bottleneck is and however that can be best anticipated.
  4. I think we can all agree that free-to-play (F2P) online game titles are usually pretty attractive but divisive. The money that pays for the server usually come from a very small portion of the playerbase, and that can cause some crazy side-effects such as hyperinflation, broken balance systems, low retention, etc. Looking at the current private server community for Conquer Online, it's clear that these problems are even more exaggerated. Servers allow players to spend less money for a huge amount of in-game currency, which in turn devalues the currency and increases the divide and quit rate between players. Servers die quickly, recycle quickly, and sell quickly in a loop. Recently, these servers started to make me consider the overall morality of some of these predatory practices for cash whales that keep the servers afloat, and there has to be better ways, right? I see games such as Guild Wars 2 do a good job with free-to-play, where their "whales" aren't spending thousands of dollars on a character. In Guild Wars 2, their shop is appealing to all players (more appealing to the average person who would otherwise be the free player in free-to-play games). For example, as a player not willing to spend $1000 on a game, there's no way I'd get into a game like Conquer Online or play any of the private servers; however, if a server were instead just selling cosmetics, utility items, effects, furniture, mount skins, toys, bonus stories, etc. in $5 - $10 chunks, I'd be totally down to invest a bit. On top of that, Guild Wars 2 has a currency sink where you can convert gold into their paid gems currency. This both allows free players to continue playing without paying and reduces inflation. Another idea I had around hosting my own server at some point was paying for hosting using a cryptocurrency such as Bitcoin or Ethereum (something I picked up from an Extra Credits video on blockchain). Back when it was cool to mine, I thought it'd be interesting if I allowed players to dedicate a percentage of their graphics card to cryptocurrency mining. Players would be rewarded the purchased currency in-game for the amount of hashes they computed, which in turn helps pay for the server (if the host accepts cryptocurrency payments) and doesn't contribute to hyperinflation. Generally, I don't think this is as sustainable today with how difficult it is to make graphics card based miners profitable, and how much the value of cryptocurrencies have fallen again. But if anyone has better knowledge around this than I do, I'd be interested to know what you think about the idea. Overall, I'm really interested to know what people think about free-to-play in general. Selling CPs (Conquer's in-game currency) in an online store for powering up characters to max is not sustainable, and we know that from the constant failing and recycling of servers. If you want more on the topic, here're a few videos from Extra Credits on free-to-play (and a few other related topics). Again, I'd be very interested to know what people think about this, and what their ideas or experiences are around free-to-play. Cheers. Videos around free-to-play game theory: Free to Play Is Currently Broken - How High Costs Drive Players Away from F2P Games Doing Free to Play Wrong - How Bad Monetization Harms F2P Games Microtransactions - What Does Good Monetization Look Like? Free to Play Laws - Can We Stop Predatory Practices? Blockchain Games - Can Blockchain Technology be a Game Mechanic? (Bit inaccurate, so take with a grain of salt) Videos around in-game inflation and currency sinks: MMO Economies - How to Manage Inflation in Virtual Economies MMO Economies - Hyperinflation, Reserve Currencies & You! Videos around player type balance: Balancing an MMO Ecosystem - Getting a Mix of Player Types
  5. Spirited

    Chimera: Conquer Online Private Server Project

    I'm not concerned with latency at all; the difference on an internal network is insignificant. I suppose you can say that modules are "dependent" on other modules since they communicate with them, but I'm not sure what you mean by how I handle reliability. Having this sort of distributed system aims to increase reliability (no longer a single point of failure if the game server crashes). In general, most actions can be completed by the region server without the realm server. The region servers are design to run on their own and handle realm server restarts and faults using the gateway. If it's down for too long, then an automated server maintenance could kick in, I guess. RPC between servers is over TCP right now, so it's not like I really have to think about health checks. TCP includes heartbeats out-of-the-box. In the future, I could add alerts and fault tolerance, but it's not really my main concern right now. I think that answers everything you asked me? If not, feel free to follow up.
  6. Spirited

    Tasks in Golang

    Based on need.
  7. Spirited

    Tasks in Golang

    Introduction Tasks is a library for implementing an async-await design pattern in Golang for recoverable, safe goroutine execution. Allows goroutines to be waited upon, canceled, etc. using channels and wait groups. Statuses are returned for fault tolerance checks. If the child goroutine panics, the task recovers and doesn't stop the main execution of the program. Examples Below is a simple example of implementing tasks for a single task and multiple tasks. More examples can be found in tasks_test.go, where 100% of the code is covered by tests. import "spirited.io/tasks" // This is an example of a single task task := tasks.Start(nil, MyFunction) task.Wait() import ( "spirited.io/tasks" "sync" ) // This is an example of a single task var wg sync.WaitGroup tasks.Start(&wg, MyFirstFunction) tasks.Start(&wg, MySecondFunction) wg.Wait() Link https://gitlab.com/spirited/tasks
  8. Spirited

    TV Cabinet Project

    Thanks! I'm really happy with how it turned out. Also, awesome that I got an excuse to use my new camera. It's such a tiny little camera, but damn did it do a good job. I only edited the PS2's scratches out. The rest is completely unedited, and the pictures look great! It's so shocking what 10 years can do. Entry level camera for a super compact SLR vs. entry level Canon mirrorless camera now.
  9. Spirited

    TV Cabinet Project

    Introduction I got a bit bored of my cheap, IKEA TV cabinet. I was brainstorming ideas with a friend, and what doesn't look better with RGB LEDs? So, I present to you, my modified TV cabinet with RGB LEDs. The LEDs are powered by the consoles themselves, but since most of the consoles power their USBs all the time, I put switches on each strip to turn them on and off with ease. I added a fan to my PS4's case, so the door can closed and air will still get sucked in through the large door crack to cool the system. I powered my SNES Classic on the same switch as the LEDs (since the manual states not to leave it plugged in). Additionally, I had to add an AV composite switch and HDMI switch to get all the consoles plugged into my 4K TV. Parts Here's a list of the parts I used (in case you want to do something similar): RGB LEDs: Colored lights can support all kinds of colors and patterns (pulsing looks really cool, but I have solid) USB Switches: Easy On/Off switches for USB LEDs USB Extension: Used for extending the 2.1A USB for powering both the SNES Classic and LEDs on the same switch USB Y Cable Splitter: Used for powering both the SNES Classic and LEDs USB Hub with Buttons: Allows me to turn off the PS4 fan, lights, and controller charger individually Composite Switch: Used to plug-in the PS2 and N64 (with room to grow) HDMI Switch: Used to switch between the Switch, Wii U, XBOX 360, and SNES Classic (PS4 plugged into the TV directly for 4K HDR). Pictures
  10. Pretext Hi everyone. I decided a few months back, after the chaos of moving jobs and finishing schooling, that I'd get back into my hobby projects. You've probably seen some of that on discord, like my TV case project (which I'll post here soon, too) or my Conquer Online portal editor in Go, but the biggest project I have is still largely up in the air. Chimera is my Conquer Online private server idea, and it's gone through a few iterations of designs. Before I ask for feedback, here's a quick introduction to the project (ripped from its readme file). Introduction Project Chimera is a four-role open distributed server architecture, named after the mythical four-headed beast. The game service is composed of an authentication server, gateway server, realm server, and fog of region servers. As players connect using the Conquer Online game client, their login will first be validated against the authentication server. Then, their client will be redirected to the world's gateway server, which decrypts and routes packets to and from the realm server and active region server. The region server services the player using a vertical slice of the game world, and the realm server instructs the region server on which slice it hosts. The separation of roles into individual, independent servers allows Chimera to experiment with rolling upgrades and server maintenance without interrupting players. Its distributed architecture allows for the game service to accept a large amount of players concurrently, while also delivering feature rich maps and monster AI. Diagram Here's a quick diagram I came up with for my own use in Visio. Discussion So, I found out recently that the way I was doing error handling in Go was wrong. I adjusted that and returned back to my original source in Go. I laid out all the project structure, figured out how packages will relate to one another, the interfaces I'll use for mapping everything together across all projects, etc. I felt like Go was a good starting choice. It introduces a lot of risk, but this isn't exactly a business project... so I thought I'd give it a try. In my experience, Go has a much better time handling request volume than C# does (comparing the async-await model in C# to goroutines in Go). Go also has a lot of language support for security, including a really solid big number implementation, and great networking support. C# is my fall back, but I'm going to try with Go first. My main concern is the architecture. I've been trying to poke holes in it, and so far felt pretty confident in it. I'm not taking the project too seriously, but I do plan on running these servers on Raspberry Pis and Pi Zeroes to better exacerbate performance issues during development (and just for fun to toy with different docker deployment models). But in general, what are people's thoughts here? At the end of the day, if something does go wrong, I can at least share that experience here - but I'd hope it'd go well. Thanks for reading.
  11. It'd be interesting if you made a very simple/basic command-line interface for the framework for those interested in an example of how to use the framework / test it. I'm not sure how much work you want to put into the open-source version, but examples are a pretty common thing I see with newer/well established repos.
  12. From a consumer standpoint, I think this is a very interesting and exciting project. I can see why a manager would perk up over tools made from this library. From an engineering standpoint, I think it's cool what you came up with for analyzing music using programmed musical theory, but I still have a hard time ingesting one aspect of this project. I know we've spoken about this before to varying degrees of "here nor there", but the scale of the open-source library is going to be very limited to those who understand D or wish to port your library away from D to a more popular language. I know this is (of course) not a concern for a secondary open-source library branch, and you should definitely program in whichever language you're most comfortable in, but it does limit its adoption and maintainability by the community. Again though, great work. I'm glad you were able to share a portion of this with us. It's a very interesting and cool project, and I hope you continue to post about it. I'd be interested to learn how this progresses past this point. Thanks.
  13. Spirited

    Spirited's Introduction

    Hi all, I realized recently that we have a few new members who don't know much about me, so I thought I'd take some time to re-introduce myself after so-many years. My real name is Gareth, but I prefer to be called "Spirited" online. I'm 27 years old, straight, male, occasionally attractive at best. I don't really post many details about myself these days, but you can find me on most platforms by the name Spirited, accompanied by a picture of a smug snow leopard. I tried to change up the snow leopard thing for Cooldown, but at the end of the day, I can appreciate a bit of familiarity. These days, I mostly work and hang out with friends. Sometimes I program in my free time, experimenting with different technologies, architectures, and project ideas. Game programming is a fun hobby of mine, but dangerously shares the same creativity / motivation pool as a lot of my other hobbies, such as photography and painting. I hope to get some inspiration through this board and the talented members we have here. I'm always available to chat, for that reason. I like to hear what people are up to. My current project is Chimera, but it's taken a lot of activation energy to get off the ground. I'm hoping I'll get some more motivation next weekend now that the holidays are over. Offline, I feel like I'm pretty average. I have an apartment that I like to keep clean, a car I like to keep fast, and a family I like to keep at a distance. I enjoy my work, especially now that I'm more settled in and done with college. I work mostly in cloud architecture and cloud computing, but I'm being moved to machine learning next week, which I look forward to. I've done a lot of odd software jobs in the past in cybersecurity, web programming, point of sales, industrial automation, test automation, etc. I tend to take interest in a lot of different topics, and I'd be interested to hear from anyone who works in machine learning, since that's what I'll be doing for the next few months. If I haven't said it already, welcome to the board, everyone. I'm happy to have you, and I'm happy to be here. Best, Spirited
  14. Spirited

    WPF Basics (Streamed Lesson)

    Eh, it happens. It takes time to get comfortable with a camera / live audience.
  15. Spirited

    WPF Basics (Streamed Lesson)

    Wow, you're really easy to listen to for this kinda stuff. I wasn't expecting it to be so fluid. Good job, man.

Important Information

By using this site, you agree to our Terms of Use.