The Nican community

There have been two majors issues on the Nican Community in the past month, or so, that have worried me. These issues, that already have been discussed before, I will centralize my points of view on this blog entry.

The first issue is the people using the [NC] tag in front of their nickname. I actually remember the first time Miroku decided to add a community tag for the players, I had a discussion with him that we have no method to non-members not to use the tag. There were actually a few people in sven co-op that used the tag without permission, but I never did anything to enforce it in my servers, and if the person did something offensive, I would just say that I had no idea who that person was. In my point of view, the tag does not really mean anything, but I guess it is a good method to show who is actually a good member of the community.

Another thing about the community, is that since we are small in numbers, we know each other well. There was a case that a person asked me if I could make him a good member, and give him administrator powers, and I answered him that this was not facepunch (A large forum-based community), and I could not make people appreciate him only because he had  a gold star title, and that he would have to earn trust. To come of think of it, I have not talked to that person in quite some time.

I found the response to some new members quite a  deception. I understand that the oncoming of new members, that just makes a welcome thread and never comes back again is annoying, and that some of that people makes a horrible introduction, but I do believe a fair chance in conforming, and choosing if they are going to stay, or move on.

There are those, of course, who spend their time trolling the forums. About a month ago, there were three incidents of spammers attacking the forums, by posting on old posts ads about Viagra, World of Warcraft gold, and other things. Miroku talked to about enforcing the registration process, but I decided not to take any action, and just delete all the posts, and ignore the incidents, because I hate when the registration process is overcomplicated, and unnecessary. I was actually thinking about making the administrator features better, and make  a feature with allows to delete all a user’s posts, while deleting the user.

Google Reader

Keep refreshing blog pages is quite a boring routine, especially when there are many different pages to check. And there is where Feeds come into play. Feeds on the Internet were developed as a method of quickly and dynamically software to check updates on a website and tell the users when there is an update. There are mainly two types of feeds: RSS and Atom.

Both feeds systems are pretty much the same thing, and they are both pretty wildly used, you just have to look for it. For example, on this blog, you might see the “RSS FEED” button all the way on the button of the page.

Google Reader checks for update automatically for you, and just the same way you check your e-mails, you can check your Google Reader page for updates on the websites you like. It is pretty simple to use, you have the bar in the left that shows the website that you have subscribed. It should not take anyone more than 10 minutes to figure it out.

Here is a list of websites that I am subscribed to (I recommend using Firefox while opening these links):

My future on GModTower

Since I started programming, I have long wanted to work on a large project with other developers. I always liked the open source idea, of people reviewing my part of the project, and I reviewing theirs, giving each other suggestions. I use to like coding SourceMod plugins, because I was able to publish my code, and other servers would be able to use it, and I think of one of my greatest success was the simple plugin of removing the teleport recharge time in TF2.

I joined the GMod Tower team with almost no knowledge of Lua, but I was ready to learn it, and since I already had much knowledge on other programming languishes, it was not that hard. My first pieces of code was not that great, I even made a Fort Wars gamemode, that looking back at it, I notice how much I used to suck at coding. Right after I joined there also seemed to be a lot of changes in the developers in the team. In the end the events, the core of the team was left with me, MacDGuy and Sunabouzu, and I made them use the SVN hosted on my computer.

I coded GMod Tower in modules, separating specific functions of the tower on different folders, each folder with a client, server and shared file, and tried to make any module the least as possible dependable on another, such as if one module failed, all the others would still be working. I coded every module in the game from two to four times before the first beta release, but oddly enough the oldest code in the gamemode, the health bar, was just edited last week, not with any kind of major changes, but just with  a small update.

The GMod Tower code base is very flexible and I am proud of most of it, except the achievement system and a few other details. It is quite easy to create stores, inventory items, assign items to the stores, change hooks, create new database columns. The admin tools are very organized and easy to use.

Things are now coming to a halt because I am tired of the Garry’s mod engine, and the developer team is nowhere near concentrated on the project. There are some annoying bugs that is beyond my power of fixing, and I want to move on to something more powerful, and not necessarily a game engine.

NOTE: I am not leaving the GMT team, I am just not going to work on it as often.

The server host

When GMT first released the first closed beta, everything was on very good shape, and the team was very glad to have a very nice server hoster, codename, Nuggets. During the summer of 2009, the whole team was almost always on-line at night, and we could share information with each other very easily trough skype, and whenever we needed to restart the server, or update the server contents, we would have to ask Nuggets to do it.

Nuggets was the only person with access to the server remote desktop, and I did not mind, because I had no reason to access the server directly. Nuggets would usually spend his time creating daily backups of the database, creating a web interface, and other cool features. Even that I was not too friendly with his tools, they were enough to get by, and leave the server running.

During early stage of the project, for one of the developers to update the content of the server, the person needed to execute an file, that when executed, would send a command to the main server to update the game content. Nothing fancy, but it worked… For some time. The executable file gave no feed back what-so-ever, and when it failed to update the server, no one knew what was wrong with the server. Until Nuggets came on-line, and for some reason or another, the SVN program had decided to lock up the files, and he fixed it in no time.

Things worsened more when AzuiSleet had to track down a bug with one the modules that was crashing the server during start-up, when that Source Engine exploite came out and Nuggets was not on-line. Only me and MacDGuy had access to the server turn on/off web-interface button, and AzuiSleet had access to the server FTP (files). So, I had to shut down the server, AzuiSleet had to upload the new .dll file, I had to re-open the server, the server would crash again, and AzuiSleet would gather the crash dump. It was horrible, and after the fifth trial, I just gave my web-interface account to AzuiSleet because I hated the idea of one developer be so depended on another. After Nuggets came back on-line, he created a FTP account for me.

Then we upgraded to a new server, with I lost my FTP access. The server surely provided much faster FPS for the server, and I had access to the server rcon trough that strange web panel that was provided for me, and I could update the server content trough the web panel also.  Until some day, the button that updated the server, altogheder with my RCON access, decided to break again, and I had to ask MacDGuy to update the source code files directly to the server trough FTP, with took a long time to do.

A few days later, the GMod Tower server on the web panel was no longer to be used for unknown reasons, and I had to turn on the new GMT Testing Server as the actual main server. The testing server was updated with an hourly content update, with I knew when the server was updated because it caused a 2-second lag spike.

It did not take long until that system broke also, and the funny thing about this time is that the Pvpbattle and Ballracer content updated perfectly fine, but only the main server content was not being updated. After some two days, I noticed Nuggets coming on-line, and I immediately requested FTP access. Then we had a discussion with me, MacDGuy, and Nuggets arguing the server was actually updating.

I have been updating all the new files trough FTP since then.

Today, October 19, 2009, the server does not seem to be coming up. I go to the web panel to turn on the server, click the giant green button, the web panel changes the message from “Down” to “Up”, and the background from Red to Green, but when I check the server list, the server is not there, and since I don’t have access to the computer, I have no idea what is happening.

I enjoy talking to Nuggets because he has the same interests as me, and we share and learn information on different subjects, and I remember we laughing together, and talking about how Facebook manages huge amount of data, but he has been coming on-line less and less often, and I understand he is busy with real life, but I only keep thinking to myself “The whole project, that a team of 4 have been working for 6 months, has come to a halt because one guy that fails to give us privileges/maintenance.” I have numerous amount of times that I see Nuggets coming on-line, and I want to tell him to go do something else with his life and leave all the access to us, but I never get time to.

The kart tracking system

It is impressive how when you start  a project, and the problems that you confront is completely what you did not think ahead.

I used to believe that the major problem would be I started writing the car code, but it actually came out pretty nicely, The camera follows the car with a certain delay, and it makes a nice motion feeling, and you can switch between third and first person view. The car also has a little system that attempts to keep the car upright by adding it’s angular velocity to the opposite direction it’s falling, it is not perfect, but it does it’s job when the car is falling from small heights. The only problem with the car it is that it drags trough the floor, and makes the box dragging sound, and I seem to be unable to remove it, but I am sure the solution will come around sooner or later.

The main problem came when I had to develop a method to track the player’s position. My first attempt to track the player’s position was to make flying entities throughout the map, with I call them progress points, and check what point the player is closer to to verify it’s position, but it is buggy and imprecise, and the main issue is when to start counting laps around the map, and if the player decides to start moving backwards into the track for whatever reason.

My final solution: There are progress points evenly spread throughout the road. Every 0.2 seconds, the game determines what is the closest point to the player, and checks if the player is in front of, or behind it.  If the point is in front of the player, the game counts as the point behind it. Now the game compares this point to the player’s last point, if the new point is farther into the track, the game adds that point to a list, otherwise, if the entity is farther back than the last point, the new point is removed from the list, this prevents players from moving back into the race track and get counted for the progress.

When the player passes trough the point right before the finish line, the game checks if the player has at least half of the points on the list. If he did, the game starts checking every frame if the player has passed the finish line, to have a less chance of two players are going to finish at the same processing time.

Reading back into this, it is pretty confusing, but it is working pretty well. I still need to fix the sound on the karts. Damn limited garry’s mod API and source engine.

The community

I looked back on what I have achieved on the last month, and the truth has been a little less glorifying than I hopped for. Some time ago, I watched a Google Talk video about how open source projects should be managed, quite an interesting video as most Google Talks, and at one time he talks that he used to spend more time answering the community than actually working on the project it self.

Talking to people and discussing on future features is fun, but it has crossed the line for me. Every once in a while I leave my house, and I come back a few hours later, to see this. And the problem it is hard to select a good person that intends to have a good talk, from someone that notices that I am on my own server, asking to be a beta tester, asking for some kind of item in the server, or asking help on how to use that SVN Updater that I dislike.

I will still accept all friends requests on Steam, but I will close the chat window, without any kind of response, if the target of the conversation is any kind of request from the above items, or asking to ask a question. Please, understand that I am doing this not because of mis-friendship, but so I can spend more time develop and learn other things.

In other news, I have been working on the racing gamemode, and things are coming together quite nicely. I will keep the details a secret for now because the team is still a bit unsure about the details.