Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Work in Progress / [NaGaCreMo '11] - "A Little Epic" Level Editor

Author
Message
Yodaman Jer
User Banned
Posted: 5th Jan 2011 23:33 Edited at: 8th Jan 2011 20:26
UPDATE - 1/8/2011

---------------------------------

A new version of the level editor has been attached to this post! Please download and leave C&C.

---------------------------------


Hello everyone!

For my NaGaCreMo pledge this year, I decided to work on my level editor for a new game. There will be more information on the game later on, but for now I just need some feedback on the editor. I can tell you, though, that the game will basically be an RPG-meets-platformer-meets-shooter game.

Progress:

=Idea
=Done
=Working on
=Known Bug

Object Placement:
Camera Control: (although not all camera functions are implemented)
Wireframe View:
Object Deletion: + (for some reason, after deleting an object, you can't click on "Wireframe View" without the program crashing) UPDATE: Bug has been fixed. Wireframe view is fully functional.
Save Level:
Load Level:

Grid:
Light creation, rotation, coloring and placement: +
Free Positioning:


Controls:

Object movement: Arrowkeys plus - and + keys on the number pad
Camera Control: Number pad (press the - and + keys to pitch the camera up or down) (only works when no object is selected)

Other functions (while not all work) are available through clicking the menus

Screenshots:

Level Editor Screenshot by CoffeeCoder, on Flickr



More progress will be done by tonight, but my laptop needs to charge right now.

Tell me what you all think!

-CoffeeCoder

Attachments

Login to view attachments
C0wbox
17
Years of Service
User Offline
Joined: 6th Jun 2006
Location: 0,50,-150
Posted: 5th Jan 2011 23:48
!!!!!! Reminds me of the levels in John.

Yodaman Jer
User Banned
Posted: 6th Jan 2011 02:18
Nice.

If you feel it's too copy-catish, please know that's not how the final objects are going to look at all. Those are just placeholder models that allow me to throw together some quick mock-ups to test out essential features. Once I get the editor to a state I can call done, I'm going to begin modelling and texturing the real game objects and then adjust the editor to load them instead of just using the "make object box" command.

I solved the Wireframe View and object deletion bug. What happened was this...

Previous version:


Solution:


In my object deletion code (not shown), I have the variable TotalObjects decrease by 1 every time an object's deleted. What I didn't realize at the time is that it would affect the For-Next loop, because every time it was checking that bit of code, the TotalObjects variable was different (and wasn't truly keeping track of the objects) and thus some objects weren't adapting. To fix it, I simply added "+1000" at the end (this doesn't affect the number inside of the variable). Then, to keep the program from crashing because it couldn't find the object number, I added the "If Object Exist()" command.

So now that that big bug is out of the way, I can start working on the ideas I have (creating lights). I'll post an upgrade later with the new features and improved functionality.

Yodaman Jer
User Banned
Posted: 7th Jan 2011 22:26 Edited at: 8th Jan 2011 08:30
UPDATE: 1/7/2011


I have made some small but very important progress.

I was able to get lights implemented, and while they're not fully functional as of yet, you can create, color and move them around the level.

Screenie:

Lights by CoffeeCoder, on Flickr

When you select a light, this happens:

A Selected Light by CoffeeCoder, on Flickr

A little, colored box appears, telling you the color of the light. I thought that was useful.

And the bug-free wireframe view:

Wireframe View by CoffeeCoder, on Flickr

I'm not going to post an update yet, because I want to clean up/optimize the code a bit to make it easier to follow and work with. One thing that amazes me about programming is that pretty much as soon as you're done programming something a certain way, you realize "Oh...hey! I can do that this way and it will work better!".

I also still need to add support for lights in the level files...right now all the program does is save/load the blocks, not lights.

Features to add yet:
-Object Rotation (includes lights)
-Re-texture an object (will only be implemented in the final version)
-Create a grid
-Add enemies
-Add player start/end markers and implement collisiony-type stuff

Important things to sort out before adding all of those:
-Clean up code and optimize certain bits of it
-Solve and prevent small, foreseeable bugs


------------------------------------------------------------------
If anybody is familiar with BlueGUI, can they tell me why I'm having trouble with the ColorDialog() command?

When I create a light, this is what NEEDS to happen....



I have to open the darned dialog three times in order to color the light properly! The command uses a DWORD variable to hold the color information that is then used to color the light. However, if I do that, and then choose to select the same three times, then the values all return "255" and I get white instead of blue or red or green. I'm wondering if the only way around it is to code my own color picker (but I wouldn't be able to code custom colors....) and implement it, but then that's a whole other banana that I've never even attempted before.

So that's my progress for now. I'll update the first post with an updated program tonight.

EDIT: Sorry I wasn't able to update the first post tonight guys, I got busy with "real life" stuff and then encountered a bug in my program that took FOREVER to solve.... So I'll post an update as soon as possible.

Yodaman Jer
User Banned
Posted: 8th Jan 2011 20:32 Edited at: 8th Jan 2011 22:06
Sorry for the bump everyone.

I've made some pretty great progress. I've got lights working, and they can be saved out to file and loaded back into the program perfectly. It took forever to get it working though, due to a strange bug. Got it solved, and while it may be sloppy it gets the job done.

Please download, mess with, and leave C&C as well as report any bugs you find. There's one that I know of, and it happens when you load a level file while there's objects in the current project. If you don't click "New Project" and then load a level, the program will crash. I need to implement a subroutine that clears the level of all objects before loading back a file, which shouldn't take too long.

There's also a bug with the coloring of lights...the coloring isn't accurate at all. To get a mostly blue light, you'll have to click red's and yellow's and a blue to get blue. It's odd. I'm thinking making my own color picker of sorts will be easier in the long run.

EDIT: Controls for object movement are now the same as camera control. When you select an object you cannot move the camera.

Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 9th Jan 2011 11:56
Looks great CoffeeCoder, if you would need any help, I would be happy to provide...

Altough you are using DBpro, and I am using DarkGDK... But still if you need help... let me know.

Yodaman Jer
User Banned
Posted: 9th Jan 2011 19:59
Thanks, Red Eye!

Would you be willing to help me figure out a way to code my own color picker for the lights? I'm thinking I wouldn't need more than a few primary colors, so it wouldn't be too difficult to code it since I wouldn't truly have any "color mixers" or hue/saturation adjusters, but I've never attempted it before and am not sure how to proceed with it...so if you could give me any pointers there and pseudo code (even if it's in DGDK) I would greatly appreciate it!

-------------------------------------------------------------------

I haven't been able to do much work on this since yesterday afternoon. I found a couple of little bugs, for example if you create a level without lights and save it, sometimes, even though there is NO light information saved in it, it will still create a light at the first object's position. It seems to happen at random intervals and I can't really re-create it. Can anyone let me know if they encounter it?

Another one is that if you click "Hide Selected Object" in the Edit menu, not only will the selected object become dark-ghosted (to represent the fact it will be hidden in-game), but the wire selection box becomes dark-ghosted as well. No idea what causes that.

I made a couple of unnecessary but useful (to me) changes:

Some Changes by CoffeeCoder, on Flickr

I changed the color of the background because black wasn't working well with the lights. I also changed the lights from small cubes to large spheres to make them more easily identifiable.

Before I add anything else, I REALLY need to tidy up the code...it's still manageable but it's getting really, really messy.

For example, let me show you my positioning code.....



Is that not messy? There's gotta be a better/more efficient way to tell if an object's a light or not...

Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 10th Jan 2011 21:17
Asuming you are using Blue GUI or BBB Gui, both have a colorpicker function, with an actual window color picker.

But if you want I will write one in DarkGDK!

Yodaman Jer
User Banned
Posted: 11th Jan 2011 21:52
An example would be great. I do have some basic understanding of C++ so I will probably be able to understand the code.

I'm using the color picker function from BlueGUI, but it's giving me a few issues, which is why I want to look into making my own color picker.

------------------------------------------------------------------

I haven't been able to work on my project at all the last couple of days, but I'm going to work on it tonight if I can. I'm pretty close to being done with placeholder models and I'll begin creating the game models soon.

TheComet
16
Years of Service
User Offline
Joined: 18th Oct 2007
Location: I`m under ur bridge eating ur goatz.
Posted: 12th Jan 2011 16:09
Quote: "In my object deletion code (not shown), I have the variable TotalObjects decrease by 1 every time an object's deleted. What I didn't realize at the time is that it would affect the For-Next loop, because every time it was checking that bit of code, the TotalObjects variable was different (and wasn't truly keeping track of the objects) and thus some objects weren't adapting. To fix it, I simply added "+1000" at the end (this doesn't affect the number inside of the variable). Then, to keep the program from crashing because it couldn't find the object number, I added the "If Object Exist()" command."


Oooh, that's not going to work very well... If I create two objects, then repeatedly delete and create the first object 1000 times, your editor will crash.

What you need to do is fill the gap in the counter when you delete an object by shifting all of the objects indexes above the deleted object down by 1. Or simply delete the last object in the stack and create it again in place of the deleted object. Something like this:



Then you can keep this code:



And that would be a much smoother solution

TheComet

Yodaman Jer
User Banned
Posted: 12th Jan 2011 23:12 Edited at: 13th Jan 2011 00:35
TheComet, I wondered about that...I was actually going to post a question about better solutions here very soon.

EDIT:

Tried your suggestion Comet, and it's not working.



Every time I try to compile, it highlights the "clone object" line and tells me it can't determine the type of parameter at TEMP0.

Curiously enough, the first two times I compiled, it ran fine, but when I tried to delete an object it told me it couldn't find the object number. Any suggestions?

EDIT2: Hmm, I removed this...


...and replaced it with...


...and it at leasts compiles now, but it's still giving me the "object not found" error.

So I deleted these two lines...


...and it works! It solves the wireframe view and delete bug. Do I still need the two lines I removed? Why were they there exactly?

Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 14th Jan 2011 10:57 Edited at: 14th Jan 2011 10:59
Hey, soory for the delay, but been doing other things. Anyway the method is to paste a image with all colors and then get pixel color, here you got an example, i know it isnt very flexible or so, normally you would make it a class, for multiple instance but here you go(i have attached the circle.png you need to check:



I am not darkbasic pro coder. So don't blame me for a simple mistake xd... It should work tho .



Attachments

Login to view attachments
TheComet
16
Years of Service
User Offline
Joined: 18th Oct 2007
Location: I`m under ur bridge eating ur goatz.
Posted: 14th Jan 2011 11:29
Yes, you have the parameters the wrong way around It should be Clone Object SelObj, TotalObjects
. After some more research I also found that you can't clone objects greater than object index of 104 I don't know if this has been fixed or not, it was quite a while ago. Anyway, this here should work:



I took out the following lines:



Because it will always be true, so that check is useless. What is object 5000? I'm guessing that's the one to show which object is currently selected. If so, I'd rather hide/show it than create/delete it. Works smoother

TheComet

Yodaman Jer
User Banned
Posted: 14th Jan 2011 18:46
Quote: "you have the parameters the wrong way around "


So did you.


thanks for helping me with that, though.

Quote: "After some more research I also found that you can't clone objects greater than object index of 104"


Weird. Do you mean in my program, or DBPro itself won't let you?

@Red Eye:

Your example doesn't work (it compiles but doesn't run for more than a second), but it gives me an idea of where to start! Thanks! I had no idea it could be that easy.

-------------------------------------------------------------------

I'm not going to be releasing another program for a little while. I realized there were several things that I've coded that could have been coded in a better fashion, and so I'm going to do a core re-write of the program. I also want to figure out how to implement a matrix creation and editing mode, so that there can be actual landscapes in the game. But that's gonna take a while.

As part of the re-write, I've decided I'm probably not going to use BlueGUI for the editor after all, and instead use Cloggy's D3D .dll to use his box and text functions to create GUI instead. So far, this is what I have for the level editor's options screen:


Options Screen by CoffeeCoder, on Flickr


New Resolution Screen by CoffeeCoder, on Flickr


Highlighting a button by CoffeeCoder, on Flickr

TheComet
16
Years of Service
User Offline
Joined: 18th Oct 2007
Location: I`m under ur bridge eating ur goatz.
Posted: 14th Jan 2011 20:35
Quote: "Weird. Do you mean in my program, or DBPro itself won't let you?"


DBP itself won't let you... But as I said, maybe it was a long time ago... Maybe it was fixed

Quote: "So did you. "


Ah yeah... So I did

...

I'M STILL EATING YOUR GOATZ!

TheComet

Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 15th Jan 2011 16:38
Thats really wierd, I copy paste the code i posted.. And it totally works.



Yodaman Jer
User Banned
Posted: 16th Jan 2011 00:24
Yeah, your code is fine, it's something with my computer. Sometimes the default DBPro IDE doesn't like me.

Yodaman Jer
User Banned
Posted: 19th Jan 2011 05:30
I haven't made any real progress, because I've been busy testing out ideas for new features and I've also been struggling with creating my own custom GUI. It's proving very tricky.

Once I have my own GUI figured out, I will re-work it into the editor and post an update.

Yodaman Jer
User Banned
Posted: 22nd Jan 2011 22:13
Hey guys!

Still no progress on the editor itself, but I've begun work on creating my GUI functions library and once I have it completed, I'll be able to resume work on re-designing the editor.

I've spent a couple of hours making a mock-up of what I want the editor interface to look like. It's entirely subject to change, of course, but this is the basic idea I had:


Main Level Editor Screen Mock-Up by CoffeeCoder, on Flickr

And that's really just going to be the surface. Clicking certain buttons like "Load Object" will bring up an entirely new panel with little representations of the game objects that are available to put in your levels (the panel will also have "tabs", which will be labeled with things like "objects", "required entities", "skyboxes", etc.,), and the "Help" will bring up the help viewer (the only thing from BlueGUI that I'm going to use in the editor). Clicking any of the "Color X" buttons will bring up a custom-made color picker to color lights and objects with. Y'know, it's just basic stuff like that.

I'm planning on a default resolution of 1024x768, and it will be full-screen only; mainly because I don't really like having my applications run in window-mode.

What do you guys think of that interface? Is there anything you would do differently? I'm completely open to suggestions.

I'll try to finish my GUI functions by the end of this week, and hopefully (even though this won't be done in time for the deadline of NaGaCreMo) soon I'll have a new demo out. Stay tuned folks!

heyufool1
15
Years of Service
User Offline
Joined: 14th Feb 2009
Location: My quiet place
Posted: 22nd Jan 2011 22:36 Edited at: 22nd Jan 2011 22:36
Quote: "What do you guys think of that interface? Is there anything you would do differently? I'm completely open to suggestions."

The layout seems pretty good but 1 thing is annoying me, the colors. Personally I don't like editors to have a lot of flashy colors, just one color scheme is what I prefer. In this case I think it would be nice if you use the Gray/Blackish buttons for every button instead of the red, green, blue and orange.

"So hold your head up high and know, it's not the end of the road"
Impulse Game Engine
Yodaman Jer
User Banned
Posted: 23rd Jan 2011 00:05
Quote: "1 thing is annoying me, the colors. Personally I don't like editors to have a lot of flashy colors, just one color scheme is what I prefer. In this case I think it would be nice if you use the Gray/Blackish buttons for every button instead of the red, green, blue and orange."


Yeah, one thing that I thought about after finishing the mock-up was that the colors were, as you say, flashy. Using different colors to make the mock-up just helped me keep track of what group of buttons were what, and that was sort of their only purpose (besides seeing if they looked good, of course). I agree that sticking to the gray/blackish buttons is a good idea.

I may change their tones a bit though, and make them slightly lighter than their background to make it a little easier to distinguish them from the background. I just messed around in GIMP some more and tried it out; it looked pretty decent, but I definitely need to change the tones a bit to make it a little easier on the eyes. I also have an idea for using the red green and blue buttons. My idea is to turn them into squares, draw an arrow on them, and use them for the positioning of objects in the final editor (in addition to using the keyboard). They could be used for positioning, rotating and scaling an object, and the colors would represent the axis (red for x, green for y and blue for z). The orange buttons will not be included anywhere.

I'll re-do the mockup and show you what I mean.

heyufool1
15
Years of Service
User Offline
Joined: 14th Feb 2009
Location: My quiet place
Posted: 23rd Jan 2011 02:26
Quote: "I'll re-do the mockup and show you what I mean"

Looking forward to it

"So hold your head up high and know, it's not the end of the road"
Impulse Game Engine
Seppuku Arts
Moderator
19
Years of Service
User Offline
Joined: 18th Aug 2004
Location: Cambridgeshire, England
Posted: 24th Jan 2011 21:09
Quote: "Yeah, one thing that I thought about after finishing the mock-up was that the colors were, as you say, flashy. Using different colors to make the mock-up just helped me keep track of what group of buttons were what, and that was sort of their only purpose (besides seeing if they looked good, of course). I agree that sticking to the gray/blackish buttons is a good idea."


I don't mind the buttons actually. I mean, when I have anything lain in front on me, something immediately visual to group them stands out more, just as long as they're not headache colours. For example, notes when editing my writing, I have each part in different colours, it just makes them more immediately recognisable.

Though I suppose the argument is, if you're using an editor, after a while, it'll be second nature to use, so the colour of the buttons is insignificant.

Hockeykid
DBPro Tool Maker
16
Years of Service
User Offline
Joined: 26th Sep 2007
Location:
Posted: 24th Jan 2011 23:25
This should help you with your color issues:



Yodaman Jer
User Banned
Posted: 25th Jan 2011 03:22 Edited at: 25th Jan 2011 03:27
NOTE: This is NOT an actual working program. The following screen shots are just mock-ups quickly done with GIMP to help me design the GUI for the official level editor. What's seen in the photos, though, is functionality that I do know how to program and will thus be able to get a demo of the interface up and running within a week or two.


@Seppuku,

thanks to your comment, I decided to go ahead and keep the colored buttons, but I toned them down a LOT and this is what the re-designed mock-up now looks like:


Interface Design #2 by CoffeeCoder, on Flickr

There's quite a few differences, and this one I think will be the penultimate (if not the final) design.

Changes:

Users will be able to name their level in the "Name: " field under "Level Properties".
Object Manipulation panel. This will allow users to set objects to transparent or hidden modes, and allows them to set collision parameters on the currently selected object.
Static and editable text boxes. Static boxes will be black, and (inactive) editable text boxes will be grey, but will turn white upon activation (done by clicking on them, of course). I seriously can't wait to get that part working!
Buttons have been widened to help reduce too much free space and allow for longer titles, and their colors have been modified to make it easier on the eyes.
This isn't a change, but it's a necessary thing to mention. The viewport will be 800x600 in size, so that the rest of the program's interface can be made up along the sides as it is now. This will help reduce rendering inefficiency because the program won't be drawing 2D on top of a 3D scene. Using Cloggy's D3D plugin will also help immensely.

The default resolution of the program will be 1024x768, fullscreen. It will not support widescreen and unless I can figure out how, 1024x768 may be as high (or low) as it goes.


Just for comparison....

Main Level Editor Screen Mock-Up by CoffeeCoder, on Flickr

Ew.

What does everybody think? Any suggestions? Still totally open to them.

Yodaman Jer
User Banned
Posted: 26th Jan 2011 00:27 Edited at: 26th Jan 2011 04:03
Okay, since there's been no feedback since yesterday, I decided to go ahead and stick with the above design with a few changes.

Changes include:

A second camera, shrunk down to fill the spot in the top-right part of the program, which will act as a "map" of the level layout.

Buttons are shrunk back down to their original size to allow more space on the screen, as their a few more buttons I'll need to add to make the editor entirely functional.

And now, I spent last night writing some more functions for the GUI library (it's not very extensive or expandable yet, but I'm learning how to make it so), and I managed to knock together the following program in just a few hours (see attachment).

Extract, run, click the button "Add Object" to call a function wittingly named "dummyProtocol" (it's just temporary until I finish the MessageWindow function), press "q" to exit, as the escape key has been disabled, and click the mouse buttons around in the dark blue box that represents the level map. Oh, and leave feedback please!

I'd post a screen shot, but DBPro is handling my images oddly and distorting the colors. Not sure why.
I'll have to investigate it, as grabbing screenshots is something I want the editor to do in the final version.

EDIT: The demo runs in 1024x768 fullscreen. Just so y'all know.

EDIT2: Also, since I feel odd about double posting so much, I've decided to start posting minor updates in my blog. You'll be able to read them here, and you can access my blog through my signature link.

Attachments

Login to view attachments
Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 29th Jan 2011 13:58
Hey, your concept is looking fine, i would change one thing:

In the object section, you have position rotation and scaling options, and you also have other things, but I would consider making the other things something for right click option, this could be done also for the lights properties....

If you get me...

Yodaman Jer
User Banned
Posted: 29th Jan 2011 23:38
Do you mean that I should look into creating menus that appear after a right-click? I was thinking of doing that. It wouldn't be hard to do at all, I'd just have to see if the right mouse button is being clicked over a certain area, and if it is, call a function for drawing a menu with options on it. Not difficult at all.

Red Eye
15
Years of Service
User Offline
Joined: 15th Oct 2008
Location:
Posted: 30th Jan 2011 11:09
Quote: "Do you mean that I should look into creating menus that appear after a right-click? I was thinking of doing that. It wouldn't be hard to do at all, I'd just have to see if the right mouse button is being clicked over a certain area, and if it is, call a function for drawing a menu with options on it. Not difficult at all. "


Not difficult, tho optimizing your gui system is a bit more difficult. Optimzing performance... and so on, depending if you draw it with direct 3d draw commands, or if you draw it with sprites with sprites might be a bit nasty but way better with performance... and so on.

Yodaman Jer
User Banned
Posted: 31st Jan 2011 18:50
Well shoot.

My GUI system was going pretty well until I started having trouble with optimizing performance.

At this point, I think it will be smarter to go back to using BlueGUI. I will still use the layout I designed last week, but the GUI won't be my own. I guess that's not so bad really, I mean, BlueGUI does have several key benefits, one of which is being able to use save/open dialogs. I really like those.

It's just a little bit of a letdown because I looking forward to using my own GUI. Oh well. For a future project, yes.

Yodaman Jer
User Banned
Posted: 2nd Feb 2011 23:50
Okay, so I'm having some issues with BOTH ways of doing my GUI so I've got a new idea.

The interface needs totally re-designed, but only by a tad bit. I'm going to have a menu bar courtesy of BlueGUI where most program functions will reside (just like in the early demo), and my own buttons for loading, manipulating and creating options. These buttons will be square with an image representing what they do (text will also appear in a statusbar telling the user what the buttons do) and will be on a panel. Above the buttons will be the 3D level map that the user can click around in to move to a different part of the level.

The reason I now have to do it this way is because BlueGUI doesn't like me using the sync command when using panels and buttons...they totally fail to stay on the screen whenever it refreshes. Menubars are not affected though, so I can keep that (though I may still create my own just for consistency, in a later release). So I have to create my own panels and buttons with the d3d_box command.

I was sick for a few days in a row so didn't get much done. I've also been setting up my new blog (accessible through my signature image) where I'll post more information about my project later. In the meantime, I think I'm gonna let this thread die and just start a new one when I've got the GUI and stuff sorted out.

3DMarine
13
Years of Service
User Offline
Joined: 9th Mar 2011
Location: Iraq
Posted: 13th Apr 2011 13:46
Just ran across this and looks interesting but the blog was deleted as well. Any updates?
Yodaman Jer
User Banned
Posted: 14th Apr 2011 22:23
Unfortunately there's no updates. A lot of stuff came up shortly after creating this thread and I haven't even worked on this project since then. I'm not even sure where it's stored on my computer anymore. I deleted the blog because the host site was terribly slow and WordPress is easier to use.

Yodaman Jer
User Banned
Posted: 17th Apr 2011 04:21 Edited at: 17th Apr 2011 04:22
So after digging around a bit I found the old project, and looking through the code made my head spin! I'm not very good at commenting.

I did notice that I was doing things very, very messily though. I was doing something immensely stupid where I was declaring arrays with an index to store object properties, when I should have made it unlimited by taking advantage of the "array insert at bottom" command. I'm pretty sure that's what it's for. Anyway, I'm now looking into re-writing the entire program and seeing where I can go with it. This is a game I want to make and I'd love to release it someday, so I'm going to work on it as much as possible.

For anyone who's interested, I will be posting updates on this project in my blog, which will always be accessible through my signature.

Login to post a reply

Server time is: 2024-04-19 22:27:34
Your offset time is: 2024-04-19 22:27:34