Sanctimonia Updates: Many and Varied
Kevin Fishburne has been leaving a number of updates in the comments forms, which I will attempt to aggregate here, covering everything since last we heard news of his Ultima-inspired online game, Sanctimonia.
To begin with, he put in some work on the in-game mini-map feature:
Tonight’s improvements include a scaled version of the previous mini map, but cropped and centered on the camera location and with larger object representations. It also smoothly scrolls keeping the camera position as its center point instead of jerking over when the player traverses cells. It looks WAY more professional than the old way, and it’s a lot easier to get your bearings by looking at it. It also makes it difficult to tell when your player has traversed cells, so the whole experience seems smoother and more seamless.
And he also made some progress on how the game server handles time:
I should be able to have the clients receive date/time information from the server and keep it synchronized and scaled. Game time will be calculated using a base time, the server’s clock time and a scaling factor of four. So one Earth day will equal four Sanctimonia days, basically.
You can see the mini-map in action, on a world map inspired by the Falkland Islands, in this video:
He also posted a link to this video, which demonstrates object persistence — and, in particular, flora growth over time — in some detail:
Kevin is particularly proud of this feature; if any of you know of another game that can do this, do let him know in the comments, would you? Personally, I can’t think of another game that allows its plants and trees to grow for as long as the server is active.
Shortly after posting that video, Kevin also posted news that he had gotten the date and time features of the server to work.
I finally got sending a date and time from the server to the client working, subtracting an offset from the server’s date, multiplying it by an arbitrary number and sending it to the client as the base world date at any given moment.
I used that as the foundation for graphical day/night cycles in the client, which though still has a bug generally works as it should. You’ll notice from the video when the day/night cycle’s timing starts getting out of sync with the debug info’s time.
Naturally, he also released another video:
A few days later, he finished implementing the “horizon bar” in the game, hearkening back to the early Ultimas with this feature. Naturally, he released a pair of videos:
Most recently, he announced his intent to get particle physics implemented in the game, and in fact managed to hammer out the rudiments of a particle system whilst recuperating from having his wisdom teeth removed.
Of course he posted a video.
So, all in all, there has been some tremendous progress made on Sanctimonia in the last few weeks. Full details can, of course, be found in the weekly reports that Kevin posts, so do be sure to read those if you want more detail about all that he has been working on since early June.
Here’s the transcript in plain text:
Sanctimonia Weekly Progress Report
Monday, June 27th, 2011
Graphics
Create new sea shell object
Used new photography rig to create new sea shell graphic. I need to find a way to elevate objects above the surface of the platform while keeping them centered, as I was forced to manually remove the background from all 16 frames of the sea shell images which was extremely tedious.
Client/Server
Implement server object maintenance with client support
The server now progresses through every active object in the object data files at the calculated interval so that they may be examined for maintenance and maintained. When an object is maintained the server determines if the object is within the cell grid of any connected players and updates those players with the object’s new data. The initial maintenance implemented is flora growth. While each flora object in the game will only be checked for maintenance once every 24 hours, for demonstration purposes I increased the frequency so that players can actually see the flora grow.
Video demonstration found here:
[some link]
Implement world date and time
Added world date and time supporting scaling and offset. This allows the year, month, day, etc., to be set arbitrarily and scaled so that game world time may elapse faster than real world time. Added associated network transaction which is sent to players upon connecting to the server.
Client Rendering Engine
Implement day/night cycles
Divided each 24 hour period into eight segments of three hours, each with their own solar lighting color. Implemented algorithm to blend between these colors so that the appropriate light color is known at any given time.
Create “horizon bar”
To better illustrate the time of day to the player I created a horizon bar, similar to that used in Ultima V. It is currently comprised of three layers: sky, land and sun. The sun moves from the right side to the left side as the day progresses so the player is better able to tell the time of day. Currently sunrise is at 6:00 am, mid-day at 12:00 pm and sunset at 6:00 pm. Eventually I will add clouds to reflect regional weather, stars to fill the sky at night, and two moons with distinct orbital periods.
I’m having some trouble dealing with fractions of a day as reported by GAMBAS due to it storing times internally as UTC, but am working on it.
A video demonstration of both day/night cycles and the horizon bar is here:
[some link]
Improve particle/wisp physics
Previously particle physics were 2D, meaning any semblance of movement perpendicular to the landscape was a graphical illusion. I’ve now given particles full 3D physics, though I had to implement a trick to create the illusion of vertical movement since the game is graphically 2D.
Add particle/wisp shadows
Because the graphics are 2D, it is difficult to determine visually the elevation of a particle relative to the elevation of the land underneath it. I worked around this by using a technique that 3D platformers use so that the player knows where their character is going to land when jumping. I created optional particle shadows drawn below the particle (relative to the screen and independent of player orientation). The distance of the shadow from the particle is relative to the distance between the particle and the land it is over. To get an idea of what this would look like, imagine a missile moving horizontally over an uneven landscape. The missile’s shadow would move up when over higher mountains and down when over valleys.
A video demonstration of particle shadows is here (wait for the fireballs to see proper shadow movement and collision with higher elevations):
[some link]
And here’s a link to me getting the Sin() function working as far as orbital bodies are concerned (the sun in this case):
http://www.youtube.com/watch?v=1TOsbXmifeM
Just shows the sun arcing, nothing too crazy like the last one.
Another video. The audio’s fucked up, as any real video game fan will surely notice:
http://www.youtube.com/watch?v=9hY3yyHoDXg
Looking good! Quick question: are you going to change the main character’s image ? It seems out of place compared to your graphics.
Other question, are you going to allow rotation of the view to get closer to the map and see the horizon or just turning around is as far as you will go?
Keep up the good work,
Jc
Thanks Jc.
“Quick question: are you going to change the main character’s image ? It seems out of place compared to your graphics.”
Yeah, it is definitely out of place. It’s just a placeholder while I work on other aspects of the game and is low priority until I have basic combat and object interaction implemented.
Eventually I’m going to use the same technique as used with the trees to render players, although animated and probably from only eight directions. So if a player has a three-frame attack animation, that multiplies by eight for 24 animation frames for the attack. The same will go for other attack types, walking, dying, etc.
I’m going to use anatomically correct (if I can find them) posable scale models (think Gumby) and paint them to look more realistic or possibly hand shade them in GIMP. How to apply different, separate pieces of clothing realistically to these animation frames in eight directions is something I’m still working on. One thing I do know is that my wife Maria will be making all the clothing for the game…she’s good at sewing and crafts. I have an awesome book on medieval life that has illustrations of all the clothing, armor and weapons of the time which will help with authenticity.
What I’ll probably do is have a graphic set for each general type of clothing (cloak, plate, chain mail, leather, cloth shirt, belt, scabbard, etc.), and represent the sub-types through detailed full-body portraits that appear when you move near a player. The full-body portrait will also integrate the unique facial portrait that I demoed in my “Avatar” app.
“Other question, are you going to allow rotation of the view to get closer to the map and see the horizon or just turning around is as far as you will go?”
Right now the graphics are completely 2D, although the underlying mechanics are partially 3D. When the game’s nearer to completion and if I obtain funding I may contract a 3D port of the client so either can be used depending on the platform it’s being run on. A cell phone will use the 2D port, a console will use the 3D port. Or I could allow the user to choose, actually… The gameplay between the two would be identical however. The client is just input, network communication and eye/ear-candy.
As it stands it’s not possible to put the game in true 3D perspective, but only create the illusion of it so it doesn’t look like Dragon Quest on the NES. Thus the horizon bar; to give the player a little more info about what’s going on.
Ok, fair enough, I understand your reasoning. It seems like a lot of work is in front of you. I hope you keep the courage to do it all and continue because it’s seems like such a promising project.
I’ll say good luck to you and can’t wait for the next update,
Jc
The way I look at it these days is that if I don’t get it done I’m a worthless sack of shit that doesn’t deserve to walk this planet. I’ve been given (or have acquired; take your pick) too many skills and insights to keep messing around like some lackadaisical fool. I have to get it done. The fleeting legacy of my life depends on it.
Also I have an update. The video’s rendering in kdenlive now at 1080p.