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


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Spirited

  1. Introduction Comet is a Conquer Online server project containing an account server and game server. The account server authenticates players, while the game server services players in the game world. This simple two-server architecture acts as a good introduction into server programming and networking. The server is interoperable with the Conquer Online game client, patch 5017 (not provided by this project). Discussion This project was initially created for an interview as a 3-week programming project. Now, it's a base source that I'm opening up to the community. Feel free to add to it and submit push requests. I'm mostly active on my GitLab account, but feel free to hit me up on Discord or Cooldown if I don't get to things soon enough. Links Source Control: https://gitlab.com/spirited/comet Readme: https://gitlab.com/spirited/comet/blob/master/Readme.md Issue Tracker: https://gitlab.com/spirited/comet/issues Storyboard: https://trello.com/b/tb8ChBlF/comet
  2. 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.
  3. 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
  4. 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.
  5. 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.
  6. 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.
  7. 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
  8. 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.
  9. Spirited

    Tasks in Golang

    Based on need.
  10. 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
  11. 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.
  12. 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.
  13. 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.
  14. I've been going between a lot of different version control / project hosting websites. I like Bitbucket, but their mobile interface is just flat out broken. Gitlab is very nice, but it's getting cluttered. Github is lovely, but since they canceled my university account, I can no longer host private projects. So, I'm really curious, what do people here use, and why do you use that host? Thanks!
  15. 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
  16. Spirited

    WPF Basics (Streamed Lesson)

    Eh, it happens. It takes time to get comfortable with a camera / live audience.
  17. 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.
  18. I tried using Microsoft's new DevOps service, since I get it for free through my work, but eh. Once GitLab introduces multiple files for snippets (which they already have a commit ready for / has been merged into the main branch), then I'll be happy. So far, GitLab has been a lot of fun for me. I enjoyed having Comet hosted there and having that automated build fire off for unit testing on checkin. It'll be even cooler once I get Chimera working with automated deploys and rolling server updates. Ahhh! It's going to be siicckk!
  19. Spirited

    Spirited's Tea & Coffee Corner

    Hey, I thought I'd share some of my favorite coffees and teas once and a while so others may enjoy them, too. I like making tea and trying new teas, so feel free to leave suggestions. Kinda silly, but I thought it might be fun - like a little tea exchange. Tea and coffee help me focus when I program, so maybe a bit relevant to the board? *Shrugs* Anyways, check this out of you like milk tea. I usually drink Twining's Earl Grey anyways for its citrus and bergamot notes. Makes for a really good milk tea base. You can buy the dried tapioca pearls off Amazon, or if you live in a primarily Asian area like I do, you can pick up some at a local Asian market. It's surprisingly good. I'd be interested to know what you all think of it. Best, Spirited
  20. Spirited

    Spirited's Tea & Coffee Corner

    It depends on your preference. If you're looking for a black tea, my favorite store-bought black tea is probably the Twinings Earl Grey with a bit of milk and sugar. If you like fruity black teas, then I'd recommend the Paris by Harney & Sons (available at Targets, around here at least). If you're a fan of green tea, then I'd highly recommend feeling around on Harney & Son's website and see what imports they have from the Yellow Mountain region of China. I haven't tried anything from them, but my coworker brings back full tea leaves from his home town in that region, and it's something else. The best green tea I've ever tasted. But yeah, it's all about seeing what you like. And on the coffee front, I've just started to grind my own coffee beans - I highly recommend it for anyone looking for a very flavorful, soft blend of coffee.
  21. I got a bit bored this evening while waiting for a download, and so I got Conquer Online working on a spare Linux machine. If playing a dead game on an operating system it wasn't meant for sounds right up your ally, maybe your laptop can't support Windows 10 or something for the latest security updates, then start by installing Ubuntu Desktop 18.04. Once you're up and running, update your system. Once rebooted after updating, install Wine and PlayOnLinux from the Ubuntu Software app. Then, open PlayOnLinux and do the following: Click "Install" and then select "Install a non-listed program". Select "Install a program in a new virtual drive". As the name of the instance, call it "conquer". For pre-installation steps, select "Configure Wine" and "Install some libraries". Select a 32-bit Windows installation. Once the Configure Wine window opens, select "Windows XP" as the Windows Version. Click Ok and select the following libraries to install on the next screen: POL_Install_crypt32 POL_Install_d3dx9 POL_Install_dinput8 POL_Install_dsound POL_Install_dxdiag POL_Install_flashplayer POL_Install_flashplayer_ActiveX POL_Install_ie6 POL_Install_msvc80 POL_Install_msvc90 POL_Install_VideoDriver Wait for everything to download and install, pressing next here and there. Eventually, you'll be asked for an executable to run. Copy the client onto the conquer virtual drive (shortcut in your home folder). Select "Browse" for an executable to run (or skip). Once ran, you'll be asked to create a shortcut. Select "conquer.exe" from browse. After adding the shortcut, select "I don't want to make another shortcut". Select "Conquer" from the main menu and click on "Configure". Add "blacknull" as an argument under General. Set the video memory size to a larger MB size under Display. Tada, you can now run Conquer Online on Linux (I think, I didn't actually try logging into a server). PS: If you get a page fault exception, update your video drivers.
  22. Spirited

    XNA Studio in VS 2017

    I didn't realize MonoGame was an actual XNA clone that's maintained. And it supports more platforms. That's hilarious!
  23. New year, new projects 🎉

  24. Spirited

    Moderator Application Template

    Hi there, Firstly, thank you so much for your contributions to Cooldown. We're ecstatic that you want to volunteer your personal time to help us moderate content and give back to the community. To get started with an application, create a new thread with the following points outlined below. Keep in mind, we require that all moderators have at least 300 posts and a positive mental attitude. We acknowledge that staff members work on projects that might conflict with board objectives, so we must also emphasize the importance of unbiased decision making. Complete conflict of interest is not permitted, such as working for the staff of another board. Contact us privately if you think you might break this condition; we're happy to work with you on exceptions. Thread title template: Moderator Application: Section Name Here Thread body template: Name: (The nickname you'd like to go by) Profile: (Where we can find you or your projects) About: (Personal statement about you and how people have gotten to know you here) Experience: (Any relevant leadership experience and subject experience) Good luck on your applications, we'll be watching closely and looking forward to working with you! Best Regards, Spirited & Staff
  25. Spirited

    Developer Status Applications

    Hey there new developer! Interested in the developer platform we provide our members, like public and private blogs and club forums? Write a small post with the following points below, and we'll review your account for Developer status eligibility. Generally, we like to see a project, some activity, and a great mental attitude towards creative thinking and discussion. Please only post applications to this thread for developer status - do not reply to other posts. Name: (The nickname you'd like to go by) Profile: (Where we can find your project work) Recent Work: (What you're working on right now) Good luck, and we look forward to following your developments on Cooldown! Best Regards, Spirited & Staff

Important Information

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