Servant Engine released under the Zlib license

Blitz3D Forums/Blitz3D Programming/Servant Engine released under the Zlib license

LogBomb(Posted 2009) [#1]
Ckob's MMO engine, The Servant, has been released under a new license, the permissive Zlib license.

In 2008, Matt Lavoice or Ckob as we knew him, tragically passed away. His wife, Kim Lavoice, has generously allowed the engine to be released under the permissive Zlib license, in the hope that a community will form around the engine, and the engine will be completed and used to create games. Which I believe Matt would have wanted.

The release is identical to Ckob's last release, apart from the following changes:

- The Blitzplay 1.0 network library has been replaced with the Blitzplay 1.14 lite network library (which has a free, unrestricted license and is included in the download).

- The buggy Cubic Splines movement has been replaced with an alternate movement system.

- Player names are no longer abbreviated to 4 digits by the server.

- A file called serverip.txt has been added to easily edit the IP that the client must connect to.

- Server world chat has been fixed. Chat can now be sent from the server to all players.

- The World Editor is now more functional, with features like mouse look and mouse based movement.


This being said there is still a lot of work to be done on the engine (as you will discover), but I believe that it has potential. We will be looking to form a community around developing the engine as a collaborative effort, so please post here if you are interested in becoming involved.

You can download the engine here:

https://sourceforge.net/projects/modifiedservant


_


Guy Fawkes(Posted 2009) [#2]
omg! tell mrs. lavoice thank you! :D


Guy Fawkes(Posted 2009) [#3]
i think i may donate my character creator when its done to the project. it will be under a license of course, but id like to help in any way that i can! :)


Guy Fawkes(Posted 2009) [#4]
ill donate it as a tribute to mrs. lavoice & family :)


LogBomb(Posted 2009) [#5]
Sounds great DarkShadowWing (^_^)

Character creation is one of those very annoying and difficult parts of MMORPG creation.


Guy Fawkes(Posted 2009) [#6]
indeed ^^


Guy Fawkes(Posted 2009) [#7]
id like to keep this thread open.

it deserves some respect.

i dont care what anyone else thinks

or says.

~DS~


Chroma(Posted 2009) [#8]
So is anyone tinkering with this or have a server up?


_PJ_(Posted 2009) [#9]
Wow, that's great news. Many thanks to Mrs. Lavoice and I hope the project continues to flourish.


LogBomb(Posted 2009) [#10]
So is anyone tinkering with this

It's been downloaded 60 times since the announcement so hopefully some people are :)

I am really hoping a few solid coders will get involved to help this project become what it has the potential to become. It won't be a small task though, but I think it can be done. The license certainly makes it worth the effort.


Guy Fawkes(Posted 2009) [#11]
if someone could explain how

STEP-STEP HOW to get IN the game,

that would be really awesome.

:)


Mahan(Posted 2009) [#12]

It's been downloaded 60 times since the announcement so hopefully some people are :)



I bought BlitzPlus to make a testrun, so now i finally own all blitz products available =)


if someone could explain how

STEP-STEP HOW to get IN the game,



I haven't more than read the .txt-files and started looking (very very briefly so far) on the code, but I got the server running and I managed to get connect (locally) with the client.


Step by step its like this (after you unzip the archive):

1. Open [...]TheServantModified\TSServer\MainServer.bb with BlitzPlus and run it.
2. Open [...]TheServantModified\Engine\Engine\test.bb with Blitz3D and run it
3. In the client (test.bb) select a fullscreen resolution that works on your computer. (As it says onscreen windowed modes are not supported). A "Main menu" made from image-buttons appears.
4. Press the "Start" button.
5. Char creation dialog, I use these values: Name="Test" the following checkboxes checked: Male, Good, Sorcer
6. (in my case my software firewall wants a confirmation that this program is allowed to access the network, but this will most certainly not happen with windows default firewall)
7. Loading screen appears.
8. After loading I'm inside the world. Server confirms my login.
9. Walking with cursor keys. Jumping with RMB (iirc) and press F1 for some extra help (although some of it seems a bit out of date (or incorrect))

Thats basically it.


Guy Fawkes(Posted 2009) [#13]
hehe. thanks mahan! :)

as for the date and help, ill fix that so it uses the currentdate$() function. hehe :P


Guy Fawkes(Posted 2009) [#14]
CMON ppl! keep this thread alive!


LogBomb(Posted 2009) [#15]
I just thought I would fill everyone in on what is going on with the engine.

Including how and why all this has come about and what the plans are for the future.

Right before Ckob died, I had been chatting with him about the Servant Engine, as I had started to develop it again.

Ckob was very responsive about it, as of course, he wanted it to progress.

After Ckob passed away, and a respectful amount of time had passed, I contacted Kim Lavoice, as by law she was the new owner of the rights to the license and Kim and I have gotten to know each other. Kim wanted Ckob's work to continue, so I proposed that the engine be released under the more permissive zlib license.

For those of you who are familiar with the 2005 GPL release, you will know that the engine does not work unless you have BlitzPlay 1.0.

What I wanted to achieve with this release under zlib, was a working version of the Servant Engine, without changing too much. So the code is basically in tact from the 2005 release. I wanted to make sure that the first release under the zlib was as close to the original as possible, so nothing was missing.

From here, major changes are in the process of being made, headed up by me, including getting all the existing features that exist in the engine to work, along with replacing the very old graphics.

Anyone that wants to help in this process is most welcome, and just needs to post that interest here.

Over the next year or so, I hope to develop the engine to a stage that it can be used to make great MMORPG games.

This is a new beginning for the Servant Engine, with a license that makes it well worth the effort.

There will be a new update soon.

Logbomb


Guy Fawkes(Posted 2009) [#16]
logbomb, where do u get blitzplay?

i mean idk where to find it man.


LogBomb(Posted 2009) [#17]
logbomb, where do u get blitzplay?


That was one of the things holding the old realease back, that you can't get Blitzplay anymore. The Author Surreal, disappeared a long time ago.

So I altered the engine to work with Blitzplay lite 1.14, which is the latest free release of Blitzplay. In time Blitzplay will be entirely replaced with either Raknet or Enet, but for now, version 1.14 allows the engine to function.

Logbomb


Guy Fawkes(Posted 2009) [#18]
so if i use it, it would

work?


LogBomb(Posted 2009) [#19]
The latest release of the Servant has basic functionality yes, but there are many features that are in the source code that are not actually working. There is a lot more to the engine than what is currently functional. This is because Ckob was in the process of developing it, when MMORPGCE took it's place.

For example, there is a separate animal/npc server, that has some very nice features for animals/npcs in the game, but is currently not functional.

Logbomb


Guy Fawkes(Posted 2009) [#20]
i see


LogBomb(Posted 2009) [#21]
Update 0809 has now been released.

Change log:

- Big project clean up, many unused files have been removed (a fresh install to a new folder is very important!) and some source files have been combined. Making the project far more manageable and less confusing.

- A project file for the "Ideal" IDE has been added for the Client Source. This is an excellent way to become familiar with the project for people who are new to it. The 'Ideal' IDE can be downloaded free here: http://www.fungamesfactory.com/

- World Editor bug fixed, where it was saving absolute file paths, instead of relative. It now saves properly, and the sample zone works.

- Extracted player animations for 3rd person view corrected.

- Improved extracted animations for other players (still needs work)

- Starting position fixed so you don't start in the trees.

- Some fixes to the animal server, and in the client for handling animals. Still needs a lot of work though.

- Other minor fixes that I can't think of now


Also on another topic, Robin King, has kindly donated Total Terrain 1.0 and Total Terrain 2.0 to the project including full source under the Zlib license. This has not been included in the current update, but will be included in the next update.

Remember if you wish to become involved, please post here or on the project forum on sourceforge.

https://sourceforge.net/projects/modifiedservant

Logbomb


Guy Fawkes(Posted 2009) [#22]
um. source forge doesnt work.

Error 500
This page is unavailable at the moment. Please try again shortly. Sorry for the inconvenience.

SourceForge.net Site Status


Wings(Posted 2009) [#23]
file works now...


Guy Fawkes(Posted 2009) [#24]
thx wings :P


Guy Fawkes(Posted 2009) [#25]
im busy fixing theservant w/ my
character creator under zlib. :)


Guy Fawkes(Posted 2009) [#26]
@logbomb, due to some these jerks attitudes, i wont be able to contribute the character creator. thank all the smartasses for this.. u NOT being 1 of them btw..


LineOf7s(Posted 2009) [#27]
Dear DSW,

Grow up.

Regards,
The Smartasses


Guy Fawkes(Posted 2009) [#28]
Dear LineOf7s, you're the biggest prick of them all. back off...


Zethrax(Posted 2009) [#29]
Dear LineOf7s, you're the biggest prick of them all. back off...

Allright, I think that's quite enough of that.

Lets not derail this thread with pettiness.


Gabriel(Posted 2009) [#30]
Dear LineOf7s, you're the biggest prick of them all. back off...

That's an unbelievably offensive remark. That title belongs to me and I'll thank you not to go passing it around to these young upstarts.


Kryzon(Posted 2009) [#31]

Dear DSW,

Grow up.

Regards,
The Smartasses



Hahaha I love little sarcasms like this one.


LogBomb(Posted 2009) [#32]
Let's keep the thread on topic please.

Logbomb


jfk EO-11110(Posted 2009) [#33]
I just realized that ckob died. I remember the frequent screenies from his project, it was one of the most promising Blitz3D projects. It would make sense to keep it alive. With a sticky thread maybe (mod?), but maybe not this one, start a new one. There are other sticky project threads that are inactive since years, right?

Thanks and best wishes to Family/Widow.


LineOf7s(Posted 2009) [#34]
Let's keep the thread on topic please.

My apologies.


AJ00200(Posted 2009) [#35]
OK, Ill help.


LogBomb(Posted 2009) [#36]
Excellent :D

There will be a new update out in the next few days, that replaces all of the old 3d graphics (except the terrains and the main player model), and has some updates to the world editor so that it edits the game directly, and the world editor folder will be removed.

In short, when this update comes out, it will be a lot clearer to work out what is happening, especially terms of folder structure for graphics and zones, including making it very easy to play around with editing zones and then playing them.

Also the coming update has some changes to the lighting, which along with the new graphics, makes the engine look massively improved, and the World Editor has had some improvements.

Things are moving into gear people, more news soon!

Logbomb


Guy Fawkes(Posted 2009) [#37]
can't wait!


Guy Fawkes(Posted 2009) [#38]
wth? i posted this a day ago.

and it says 7 minutes ago :S


Gabriel(Posted 2009) [#39]
The site always gets funky at the end of one month / beginning of the next.


Guy Fawkes(Posted 2009) [#40]
keeping thread alive


Robert Cummings(Posted 2009) [#41]
That's an unbelievably offensive remark. That title belongs to me and I'll thank you not to go passing it around to these young upstarts.
I vote me.


LineOf7s(Posted 2009) [#42]
keeping thread alive

Here's an idea: why don't you keep the thread alive with some actual contribution rather than just uselessly bumping it?


...and no, the irony of this post is not lost on me.


Guy Fawkes(Posted 2009) [#43]
um. here's another idea. how about instead of trying to flame ME all the time, how about you take your OWN advice, and do the same ;)


Guy Fawkes(Posted 2009) [#44]
I found a REAL nasty glitch.

If you don't have a name, then it closes the creator.

its been fixed.

CreateChar.bb:



have fun :)

~DS~


Guy Fawkes(Posted 2009) [#45]
ok. whats up w/ this code?

				If myname$ = myname$ And Upper(Left(cText,6))="!BAN "+myname$ Then
					BP_UDPMessage(0,5,"You need to select a name!",False,False)
					visibleMessageAdd("You can't ban yourself!",myname,0,$000000,$ff0000)
				Else If myname$ <> myname$ And Upper(Left(cText,6))="!BAN "+myname$ Then
				    BP_UDPMessage(0,5,"Sorry, "+myname$+", but you have been banned!",False,False)
					visibleMessageAdd("Sorry, "+myname$+", but you have been banned!",myname,0,$000000,$ff0000)
				EndIf


i need to know how to check for if myname$ is = to my actual name, then dont ban me. but if my name after "!ban" = another user, then ban them.

ex: Player name i use: <test1>
user i ban: "!BAN test", and it would ban the user "test".


Gabriel(Posted 2009) [#46]
If myname$ = myname$ And Upper(Left(cText,6))="!BAN "+myname$ Then

Else If myname$ <> myname$ And Upper(Left(cText,6))="!BAN "+myname$ Then

I have no idea what you're trying to do here. None.

Firstly, you're comparing myname$ with myname$. Comparing a variable with itself. It is always going to equal itself. Then in the else, you check again. I say again, it's always going to equal itself! How could it not equal itself?

Then you're checking to see if the 6 leftmost characters in the string are equal to "!BAN " followed by the contents of myname$. Well given that the string you're adding on the beginning is already five characters, I hope the names can only be one character long, because otherwise, it's not going to be six letters in total, is it?


Guy Fawkes(Posted 2009) [#47]
instead of smarting off, how about you try HELPING or dont say ANYTHNG AT ALL. at least IM trying, unlike you.


Gabriel(Posted 2009) [#48]
I just did help you. How about instead of wasting your time bitching about the standard of my help, you actually read my help and go and do something about it? When you've fixed the problems I just pointed out, and if it's still not working, I'll take another look.


Guy Fawkes(Posted 2009) [#49]
and instead of you bitching all the time, how about you just back off. you know, it's amazing people like you are still around to bitch, moan, and complain.

well im sick of it. so i dont care if you're "helping" or not, your comments are offensive, therefore, i'm ignoring you.


Gabriel(Posted 2009) [#50]
you know, it's amazing people like you are still around to bitch, moan, and complain.

You're right, it *is* amazing that people are ignoring your bad attitude, bad manners and obvious anger management issues and trying to help you after the way you speak to everyone. I'll do my best not to let it happen again.


Guy Fawkes(Posted 2009) [#51]
no, no asshole. its YOUR bad attitude, and you know what, you can take it somewhere else. from now on, thanks to assholes like you with their smartass attitudes, i will be emailing logbomb from now on.

so DROP it, you baby!


LineOf7s(Posted 2009) [#52]
i will be emailing logbomb from now on

I'm truly sorry, Logbomb. No-one ever meant for you to get hurt.


Guy Fawkes(Posted 2009) [#53]
and im truly sorry as well, logbomb. no 1 meant for u to get caught in a blazing fire because of jackasses like lineof7s who apparently has no manners WHATSOEVER


Ross C(Posted 2009) [#54]
Well, you've lost me helping you from now on too man. It's just unbelievable. It really is...


Guy Fawkes(Posted 2009) [#55]
good. i dont need you anyway. i'll just use my coder to help me. so skip ALL of you


Mahan(Posted 2009) [#56]

i'll just use my coder to help me.



Unless you acquired an technically skilled employee, and pay good wages, I think you'll find that it will be hard to find any developer that will accept being addressed as "my coder" by you.

Besides if you browse the history of this forum, you'll find that several good developers gave you sound advise and lots of example code. They did this (at least as I understand it) just because they are nice guys and because of their desire that this community should be a living one where anyone should get some kind of answer or at least some good hint where to continue, if they "hit a wall" in their own investigations/analysis of a problem.

Look at it this way: You've told several people of (sometimes very rudely) after they helped you several times in the past, just because they once decided that they didn't want to finish your code, but instead gave you hints on where to continue. It's like you ignore, or even resort to general rudeness, to several people that have put in hours of their free time to help you in the past just because this one time they either didn't want or didn't have time, or just felt that it was time for you to put in some effort too.

<rant>
This is my opinion:

This behavior is far past immature. It's extreme egoism and borderline to sociopath. (I.e. you seem to behave in a good way sometimes but only in the cases where you can see a short term payoff.) In a community like this, such behavior does not payoff very well though and you get frustrated, like above, because the developers in general are smart enough to see through you and they don't want to be tools for you. (This is what I sense when reading between the lines at least)
</rant>

I'm sorry for adding this to the "Servant thread" but the state of this thread already invites to a fresh restart.


jfk EO-11110(Posted 2009) [#57]
I wonder why this person was not banned yet, like all other users who obstructed the terms. Those posts are unbearable. Where's a Mod when you actually need one.


Ginger Tea(Posted 2009) [#58]
afaik anything outside of the off topic realms is rarely modded unless pointed out to the mods via email


Guy Fawkes(Posted 2009) [#59]
what? ban me for speaking my mind? I'm sorry, but over here, we call that predjudice.

u don't have to worry, i'm sick of the way i'm treated around here. I'M DONE!


Ginger Tea(Posted 2009) [#60]
and over here it looks like you fly off the handle over the slightest thing

gabriel had pointed out an area of your code that was either redundant or in need of a tweak as you were checking a variable against itself (twice)

help and advice was offered, sure he didnt fix it for you, thats the point, he pointed out an odd peice of code that needlessly checked a variable and asked you to think why you would write it to do such a pointless task and then to ponder yourself on the solution

if dave equals dave do this
if dave does not equal dave do this instead

well the way you were comparing dave with dave, dave would never NOT not equal dave


Guy Fawkes(Posted 2009) [#61]
my dad is having a liver biopsy in a few days.

i dont need ur crap.

im gone


Ross C(Posted 2009) [#62]
You got quite a lot going on over there. By my count you have:

A project on the go, that should have "hit the shelves" around March i think it was.

A gas Leak

Your dad was having nose surgery

Your dad is having biopsy.

That said, IF your dad is actually having that done, then best of luck to him and i hope he's ok. Surgery always sucks...


LogBomb(Posted 2009) [#63]
Come on peeps let's stay on topic.

The update has taken about a week longer than I had expected, but will be up in the next 12 hours, it's a biggen!

The main goal, of the past few updates, has been to clean the project up, making it more presentable and understandable for people who are potentially interested in becoming involved. It is important to understand that what Ckob released in 2005, was similar to a car, with bits and pieces of the engine ripped out. So I have been putting the pieces together, focusing on getting what is already in the engine working. This update is far more presentable graphically, and the project is more functional, with a cleaner file structure, including where the world editor is concerned.

If you are interested in developing this engine, then this is the update to start working with. Also after this update there will not be an update for some time, as some of the major work will be done adding features to the engine. Getting involved at this point, will allow you time to become familiar with the code and to make submissions, with out the base code changing. Also if people are interested in working on a project fork, you have every opportunity as the Zlib license is very permissive, just keep us informed ;)

I will post again as soon as it is ready for download.

Logbomb


LogBomb(Posted 2009) [#64]
The update has been released here:
(a fresh install to a new folder is very important!)

https://sourceforge.net/projects/modifiedservant/

Update 0909:

- Big clean up of all the graphics. including deleting unsed poor quality graphics, replacing various 3d models with improved models and touching up some of the existing 2d graphics. The main player model was also partly re-animated.

- The World editor now edits the game directly, and is found in the folder Engine\WorldEditor.

- Many improvements to the world editor, including: when a model is selected it appears in red, scaling information is now saved, the Auto Tree/Grass placement tool now works (note: This tool randomly places the 4 models found in the Media\Tree folder. Also models placed with this tool do not save any scaling information, to save time during loading. If you wish to scale individual trees then place the tree the usual way).

- Improvements to the lighting. Previously the only lighting that was working in the scene was ambient!

- The Inventory is semi functional. Click on the "I" icon in the menu. There is an Axe by the building that you can pick up and put in your inventory. Basically I just got Ckob's Inv code working, and it is quite incomplete.

- The Character Info window is semi functional. Click on the "C" icon in the menu. Again, I just got Ckob's code working (don't blame me for the graphic lol).

- The keyboard controls have been improved, with the left and right arrow keys now rotating the player instead of strafing (looked weird in 3rd person mode lol). Along with the usual arrow keys for movement, the W, A, S, D keys can be used to move (if the chat entry is not being used).

- 3rd person mode has been made default. Changing from 3rd person to 1st person mode is now controlled by the F3 and F4 keys (previously the number keys 4 and 5??)

- The in-game help menu has been updated with the relavant current changes and previously missing information.

- Animation speed and walking speed has been tweaked. The delta timing needs to be looked at though.

- The menu screens and in-game menus have been worked to handle different screen resolutions. The engine is built to be run in 1024x768, but the menu screens and in-game menus are now funtional for resolutions of 800x600 and higher.

- The screen resolution start screen has been removed, along with the include file. The graphics mode is set to 1024x768 by default. The idea will be to use the Options button on the title screen to choose a resolution. In the mean time, you can set the resolution in the code maually if 1024x768 does not suit. Minimum 800x600 (windowed or full screen).

- DarkShadowWing's fix has been included for the bug where the engine crashed if the "Create player" button was pressed while there was no name entered.

- Robin King, has kindly donated Total Terrain 1.0 and Total Terrain 2.0 to the project including executables and full source under the Zlib license.


If you are interested in getting involved in this project, or starting a project fork, then this is the version to use, as the project has been cleaned up significantly compared with Ckob's 2005 release (see the previous post for more details).

Logbomb


Guy Fawkes(Posted 2009) [#65]
logbomb, at

x=213.976
y=64.8069
z=319.941

, the axe should have collision

also,

if u keep pressing esc, it will keep resetting the timer

for exit

when u exit the chat, the chat box should disappear.


LogBomb(Posted 2009) [#66]
To enable collision for weapons, change the Constant Wep_col to 1 in Globals.bb

Const Wep_col = 1

This is because in functions.bb in the function, createzone, in the load weapons section there is the line:

EntityType w\entity,Wep_col

The value of 1, enables collision.

The timer resetting if you keep pressing esc, is not a problem.

If the chat box disappeared when you exited the chat, you would not be able to see any messages sent by someone else. This is not a problem either.

Logbomb


Guy Fawkes(Posted 2009) [#67]
i mean only when u exit from the chat. then u reinit it.

u know. like hide the graphic of the window. etc


Guy Fawkes(Posted 2009) [#68]
Logbomb,

if upper(left(cText,6)) = "/Drink"
DrinkBeer=1
endif


wont work..

why?


Yasha(Posted 2009) [#69]
"Upper()" converts a string to upper case. Since "/Drink" has lower case characters, it'll never return true as the left side will never contain those characters.


Guy Fawkes(Posted 2009) [#70]
If Left(cText,6)="/Drink" Then
MessageBox(hwnd,"","",0)
     Drinkbeer=1
EndIf


still wont work.

why?


Guy Fawkes(Posted 2009) [#71]
Edit:

Nvm. lol. I fixed it

Now which file is the 1 that holds the start menu? you know, where u have the start option, options menu, etc.. ?


xtremegamr(Posted 2009) [#72]
That's an unbelievably offensive remark. That title belongs to me and I'll thank you not to go passing it around to these young upstarts.

lol!


This project looks pretty cool! I'm download the latest version right now...

I'll try to help now and then if I can, but I make no promises.


Guy Fawkes(Posted 2009) [#73]
logbomb?


LogBomb(Posted 2009) [#74]
If you use the Ideal IDE found here:

http://www.fungamesfactory.com/index.html

There is a project file for Ideal for the Servant Client. It allows you to do project searches so you can find things very quickly.

Much better than using the standard blitz editor.

Logbomb


Guy Fawkes(Posted 2009) [#75]
logbomb, where is the gui file?

i need the name of the file mate


AJ00200(Posted 2009) [#76]
Is there an EXE for the Blitz Plus Server, because I only have B3D?


LogBomb(Posted 2009) [#77]
Hi AJ, it is in the folder TSServer under MainServer.exe

Like I said DarkShadow, if you download the Ideal IDE and run the client Ideal project file, you can do whole project searches, which makes finding what you are looking for very easy.

Now which file is the 1 that holds the start menu? you know, where u have the start option, options menu, etc.. ?


The main menu function mainmenu() is found in functions.bb

If you are looking to add to the options button then look for the code:



It comments out the options function which has not been written yet.

Logbomb


Guy Fawkes(Posted 2009) [#78]
hehe. good ol' logbomb. read my mind again

ROFL XD


BLaBZ(Posted 2009) [#79]
Been reading up this thread, If you guys need a place to work on/organize this project feel free to go to http://www.bizzybudgames.com

I'm sure the tools there could help people to more easily get involved


AJ00200(Posted 2009) [#80]
I would change the file in World_Editor/serv_Editor.bb to be like this:
ZONEID$ = Input$("Please enter the number of the Zone that you wish to edit ?: ")
Print("Loading...") ;<<<ADD THIS LINE
terraedit = 1

This lets you know that its loading and not just frozen or stuck on a number that is too large...

EDIT: The jump code needs fixing, or the models. You can jump into tree branches/the house an float there, and Glitch-Hunters wont take long to find this.


LogBomb(Posted 2009) [#81]
I have added the change to the main project ;)

I should mention that the way the world editor opens a zone needs to be changed. So instead of using the current input method it would make use of the "File","Open" menu option in the main part of the editor. It might be possible to use the FileDialog() function from the included file opensaveddialog.bb, which is what the "Models","Load Models" menu option uses.

Logbomb


Guy Fawkes(Posted 2009) [#82]
does anyone got 3d snow and rain?

im gonna add it to the engine


LogBomb(Posted 2009) [#83]
There seems to be some sort of rain system in place already, although I have not had much of a look at it. There is also a lightning function.

Logbomb


Guy Fawkes(Posted 2009) [#84]
ooo. if everyone had particle candy, id add rain and snow ><


Mahan(Posted 2009) [#85]
Do you guys mind if I shamelessly "plug" you? :-)

Today I released my free userlib ccDB for threaded (concurrent) database access (SQLite and ODBC) in both Blitz3D and BlitzPlus. If the server is going to continue to run on BlitzPlus i reckon this lib might be a good idea to build a persistence layer around, because threaded DB updates does not temporary stop the server process.

Feel free to check out the release thread.

edit: spelling


Guy Fawkes(Posted 2009) [#86]
I agree w/ mahan. We should make a create username / a login screen for users to use!

:D


Mahan(Posted 2009) [#87]
I don't get what threaded DB access has to specifically do with a login screen (more than for example the character stats, or persistence of inventory), but I'm glad you agree :-)


Guy Fawkes(Posted 2009) [#88]
o. i thought u made an ENTIRE mysql plugin. lol!


Mahan(Posted 2009) [#89]
I have tested it against both MySQL and SQLite so (depending on your definition) it is an entire MySQL plugin, but you need to install the MySQL ODBC driver (free download from mysql.org) to use it.


Guy Fawkes(Posted 2009) [#90]
ah. i see.

then we MAY be able to use ur technology to create a database to login/ out from


Mahan(Posted 2009) [#91]
Yeah sure. But MMOs are usually build around monstrously big DBs where the DB is used to persist most of the game-state. If you (as an example) have played WoW and you loot a [Dull Letteropener] from some rabbit the action of moving this item from the loot-window to a bag is actually a cached DB-operation within a DB-transaction.

Pretty much everything you do in such a game goes to the DB, included saving/persisting of player positions etc.


Guy Fawkes(Posted 2009) [#92]
so?

i had my own private server before. i know what i am doing

lol!

XD


Mahan(Posted 2009) [#93]
Since several private servers are distributed with installers I wouldn't call "having an own private server" exactly the same as "knowing what one is doing" when it comes to databases. I know several people that run a private servers for fun, but don't know SQL the slightest (even to the point they don't know what SQL means in some cases).


Guy Fawkes(Posted 2009) [#94]
um, I do.

i studied what it does.

i know how to change values.

lol!

:P


Mahan(Posted 2009) [#95]
My point is this: If you, in the future, happen to take part of the Servants persistence mechanisms you're probably gonna do a lot more than "change values".

Much DB knowledge (and I want to point out I'm no master myself) is about designing the DB model for it's purpose so it can store what it must store and at the same time allow querying/updating time-critical pieces of information efficiently. Mastering this (even for a single DB-engine) is not done over a weekend.

And at the designer end of a game it's this kind of design knowledge that is needed, not changing the value of a few records with "MySQL Query Browser".


Guy Fawkes(Posted 2009) [#96]
yea. i know. but i think if we can come together, we can pull this off!

:)


Mahan(Posted 2009) [#97]
Sure we can :-)

A very nice side effect is that DB knowledge is very sought after in the software developer market, so while we do this here for fun, we might benefit from it otherwise as well.


Guy Fawkes(Posted 2009) [#98]
exactly mate! :)

lets do this!

ill start by adding a login to the game! :)

thanks for inspiring me again mate! :)

blitz WAS dead to me but not anymore! :)


BLaBZ(Posted 2009) [#99]
....


LogBomb(Posted 2009) [#100]
You will see in the file net.bb there is a commented out function call, for the function checkpassword. The function is in that same file and has the code for checking the username and password in an external database via PHP.

Just letting you know.

Logbomb


Guy Fawkes(Posted 2009) [#101]
thanks logbomb


Guy Fawkes(Posted 2009) [#102]
logbomb, we NEED a php file i guess

can u download it?


Guy Fawkes(Posted 2009) [#103]
how do u get a value from the textbox?

i need it to complete the register.


Guy Fawkes(Posted 2009) [#104]
EDIT: Nvm

found it


AJ00200(Posted 2009) [#105]
What is the overall goal of this?
To make our own game or to make a program to help people make their own MMORPG?


Guy Fawkes(Posted 2009) [#106]
um, im doing this for everybody. as soon as im done debugging it, im giving it to logbomb.


LogBomb(Posted 2009) [#107]
What is the overall goal of this?
To make our own game or to make a program to help people make their own MMORPG?


To develop the engine and tool set to enable people to make their own MMOs, or even MMO creator. The engine is under the zlib license, so you can do just about anything with it.

I will be adding any decent source mods to the main project, but people are more than welcome to create a project fork if they wish. Just keep us informed.

Logbomb


Guy Fawkes(Posted 2009) [#108]
@logbomb, check ur mail


Bobysait(Posted 2009) [#109]
You maybe need some management for this project.
You'd better start by explaining what miss, what need to be fixed, etc...

For now, I think some timing control miss, like, Delta-timing or tweening
currently, player runs as far as the fps allows it, it should be controlled by timing.

The whole thing contain many functions and features, but maybe it should need at first time to be clean up
Sort the functions by module, try to find what function need an improve, and maybe replace 2d stuff with something stronger, like fastimage, or some 3D accelerated 2D ( there is some of those free ) .

And of course, Don't give up !


AJ00200(Posted 2009) [#110]
Maybe a to do list will help.
That way we know what the current bug and features we are currently working on.


LogBomb(Posted 2009) [#111]
I think what has been achieved so far from the past 2 updates, is that the project is now in a state that makes it easier to get a handle on what needs to be done (in comparison, to Ckob's final open source release)

In other words, the project is now approachable for further analysis.

This being said, potential serious involvement in the project is going to require some serious time buried in the source.

What I would like to see happen, is some experienced blitz coders to come on board, ideally resulting in someone with more blitz experience than me, taking over the role of project leader. This wouldn't mean that I would not be involved, but it would be good if one of the big gun B3d users came on board as project leader. If the right person comes along, then they will be given Admin access to the sourceforge page. Please let me know if you are interested.

I would like to see Ckob's dream realized, and really these next few months, and who get's involved, will determine it's fate.

Logbomb


Guy Fawkes(Posted 2009) [#112]
bringing topic back up to top, logbomb


Guy Fawkes(Posted 2009) [#113]
hey everybody, what happened to logbomb? its like he just disappeared


Guy Fawkes(Posted 2009) [#114]
?


LogBomb(Posted 2009) [#115]
Everything went very silent after my last post.

When I embarked on this project, I was under the impression that some of the more experienced B3d users would want to come on board, but so far no-one has contributed anything of any significance. I thought there might be some sort of sentimental motivation considering this is one of Ckob's projects.

It is possible to get a handle on the source as a whole, but it does take some time.


Guy Fawkes(Posted 2009) [#116]
i say we continue to do it for ckob! CMON PEOPLE! ><


Guy Fawkes(Posted 2009) [#117]
logbomb, start a website for it. im NOT going to let this die, just b/c ppl are lazy.. -.-


LogBomb(Posted 2009) [#118]
It would be great if someone could pick up the project, perhaps create a project fork.

There has been a significant amount of work done on the engine, but I suppose it is getting old and still requires a lot of work. I don't hold much hope for the future of the project. Like I said, I thought there would be a more significant reaction/contribution.

Logbomb


Guy Fawkes(Posted 2009) [#119]
cuz ur doing this on the wrong forum. if u want some help, i suggest making an irc


Jiffy(Posted 2009) [#120]
I'm interested in helping out. Unless anyone has any issues/suggestions with/for coding standards/organization, I'm making some organizational changes first.
If anyone's working but not posting, speak up now.


AJ00200(Posted 2009) [#121]
It is on my to-do list, but my game is on top right now.


LogBomb(Posted 2009) [#122]
Yes the code could certainly use some organization ;)

Keep us informed about how your progress is going :D

Logbomb


Guy Fawkes(Posted 2009) [#123]
i say we add the mysql plugin to this. i'll work on the register website ^^


Jiffy(Posted 2009) [#124]
I'm going to avoid adding anything for a bit. Get it clean and workable first.


Guy Fawkes(Posted 2009) [#125]
good luck w/ that. lol


Jiffy(Posted 2009) [#126]
Play nice.
It's coming along well enough, tyvm.
I should be able to post updates/changes by the end of the week.
Mostly I'm creating a 'realm' based project folder hierarchy, sorting out media within it & trying to emulate enough of the blitz plus commands so no one _needs_ it to help out. I'm mostly done with the first, and about 1/3 done with the last, which means it works mostly, but acts broken till I add more.
Still trying to work out a useful & transparent way to display per zone organization/contents. Gonna leave alone for now.


Wayne(Posted 2009) [#127]
Looking forward to the results of the reorganization Jiffy.
I'd prefer all B3D as well if possible.

I tried the Sqllite stuff mentioned above, as well as one of the GUI front ends.
I found it very simple to use, lite weight and fast. Nice little engine,
and be no problem to use it for alot of things.

I've worked with MYSQL and larger enterprise databases so can be of assistance if necessary,
but we'd need B3D userlibs for odbc, or direct connect, not sure if B3D has one at the moment.
There maybe a php interface for doing that, but not sure how that looks.

I have experience with EQ Emulator, WOW Emulator, and associated databases. Also do upd and tcp communications.
Perhaps some of that can translate to helping out, will see.

8)

cheers


Jiffy(Posted 2009) [#128]
A quick update:
I've got most of the folder organization sorted. It looks about like this:
[+] !Includes
      BlitzPlus_compat.bb
      Globals.bb
[+] !Libraries
      blitzui.bb
      BPproV1.0.bb
[+] #Media
      [+] fonts
      [+] gfx
      [+] models
      [+] music
      [+] sounds
[+] $Client
      [+] !Includes
      [+] Media (temporarily here for backward compatability)
      Servant_Client.bb
[+] $Server
      [+] !Includes
      [+] playerdata
      Servant_Server.bb
      Servant_Server_animal.bb
[+] %Tools
      [+] !Includes
      Servant_Editor.bb
[+] A Sample Realm
      [+] #Media
      [+] $Client
      [+] $Server
[+] Your Realm
      (currently empty)
(Shortcuts to client, server, tools)

Pretty much all code is cleaned up for formatting/whitespace.
Client only globals are separated from common and server only globals.
Movement, weather, and zoning functionality mostly given separate libraries.
'Pathload' library written to make loading and saving resources a little easier- as well as simpler to read/understand. This library will be expanded.
Cubic env map functions simplified, though they are still glitchy. I liked looking at 10 lines of code plus a function instead of 80- will fix later.
Server still cannot be compiled under b3d. I haven't decided if sticking with the current GUI is a factor- or if it'd be easier just to rewrite the server from scratch. I don't know if anyone else would use partial B+ compatability if it was completed or not.
Servant Editor made to run better. I don't even remember what it did wrong.

I'm currently looking over resources in an effort to plan to make this work, and work well, so any suggestions for solid & fast GUI or particle Libs, lemme know. The current GUI lib I can live with, but if something else is free and offers a significant advantage, lemme know.

The suggestion to use Mahan's ccDB is a good one- though I'd like someone to suggest an SQL/MySQL DB that doesn't need to actually be installed, and will run, minimally configured from any path. This of course is not a neccessity- but I think in the spirit of 'Blitz' it would be good. People can upgrade to a 'better' full-install DB later.

I also found a LOT of Ckob's original Servant postings, help files, and donated models. I'll make them available to LogBomb in case they were lost, so that unless there is some caveat or proviso to the contrary, they can be packaged with future releases.

Eventually, the idea of moving 'past' DX7 is gonna come up, so my view is as follows: Free is manditory, and growth is a good thing. The only options in that respect become Devils (almost- the DLL code is not open, and development on it seems dead), and Softpixel (DX9, OGL, software render/raytrace!) which kicks butt (Thanks Lucas!).

For now- It doesn't matter, I'm just going to stick with the core code. But eventually, my vote so far is with SoftPixel- so the idea that this project can 'grow' is real.

But for now- just trying to lay down the foundation.

I wanted to post something tonight, but it's really still too messy (I started a new job this week- so less time to play...). We'll see what there is to post in a bit, though. There really is a lot to examine & plan.

Later.


LogBomb(Posted 2009) [#129]
This sounds all very encouraging :D

It would be excellent if you could send me those ckob releated files, so I can compare them with what I have managed to dig up. Just email them or email me a link to download them.

I certainly agree 100% that the initial focus needs to be on cleaning up what we already have, and making what is there functional.

Concerning converting the server to b3d, I believe this could be a useful task for someone to put their hand up for, to increase the interest in the project. Blitz plus is not something that a lot of people are working in anymore, and a straight conversion of the server to b3d (which is basically a matter of changing the GUI) could increase interest in the project. So if someone is interested in doing this, just a straight conversion with no extra bells and whistles, then please let us know. After that further work can take place on the server, when a clear direction is established.

Logbomb


Mahan(Posted 2009) [#130]

The suggestion to use Mahan's ccDB is a good one- though I'd like someone to suggest an SQL/MySQL DB that doesn't need to actually be installed, and will run, minimally configured from any path. This of course is not a neccessity- but I think in the spirit of 'Blitz' it would be good. People can upgrade to a 'better' full-install DB later.



Just wanted to point out that ccDB has the library SQLite lib built in, and it is almost exactly what you are talking about:

From the page: http://www.sqlite.org/ :


SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite is the most widely deployed SQL database engine in the world. The source code for SQLite is in the public domain.


(emphasis mine) I.e The SQLite-DB is merely a file that can live in the game-root folder or whatever.

Some sound considerations if you want to go this path:

* Write SQL92 standard SQL and check the DB-layer against at least MySQL and SQLite so that it works on both. This way there is good scaling in the solution, enabling games that grow larger user-bases an clear update path.
* SQLite is a very good "local filebased" DB that talks SQL, but since it's filebased it's not very good at heavy concurrent access from several connections as standalone server-based DBs are (file locking when writing the DB degrade multi-connection performance much). Therefore it's a good plan to queue up gamestate changes and send them to the DB using the functionality in ccDB. This allows the BlitzPlus server to remain responsive all the time, since the DB work is done threaded. When nodes need lookup info from the DB (and this info is not in the servers cache/ram-based state), these lookups can maybe get prioritized over pure state saving.

Since ccDB uses the same API for both SQLite (built in functionality) and connections to a ODBC source (other DBs), it should mainly be a matter of writing standard SQL, to enable the possibility to change between the two.

edit: clarification


LogBomb(Posted 2009) [#131]
The way it works currently, when a user is created, the server creates a file with the same name as the user. In this file, the user's information is stored. When the user logs out, it saves the latest information to the file.

This sort of multiple file system that is only accessed on log in and log out is quite simple and efficient.

I think at this point, looking at sql database type solutions is not really a priority.

The project is still very much at the stage, where it needs to be developed to a point where it is an organized and functional base to work from.

Don't get me wrong, I am enjoying the revival of interest in this project (^_^) but I am just trying to give some direction as to where the project is at and where the focus needs to be.

Logbomb


Jiffy(Posted 2009) [#132]
LogBomb:
I'm still sorting out versions and doubles of his stuff, but it shouldn't be long. Being that no one really seems interested in the wrapper, I'll abandon full functionality, and just abstract out the bits needed to make the code run.

Mahan:
If, after I sort out the code, you're interested in the fileio stuff, plese feel free- I'll try to separate the different types of data (if implemented) into the different needed calls- otherwise I'm just cleaning up & maintaining stability.


Guy Fawkes(Posted 2009) [#133]
Hows it goin, jiffy?


Jiffy(Posted 2009) [#134]
Still sortin' stuff out, Speedbumped by thanksgiving. Checked all the models and fixed some of the invalid texture links. Working on the old particle engine demo right now. Progress is kinda random while I digest/retool some of his more cryptic code. All in all it's still coming. I may redo some textures tonight if coding gets slow.


LogBomb(Posted 2009) [#135]
Sounds like you are making progress :) and there certainly is quite a bit to digest ;)


Guy Fawkes(Posted 2009) [#136]
how's it goin jiffy & logbomb?

once u guys sort this out, i'll do my share of help and add some particles from particle candy into the project. i bought it so i have a license to use it ^^


Jiffy(Posted 2009) [#137]
Goin slow- work's been overwhelming me, & I still haven't sent my last bits to Logbomb due to (hopefully solved now) email package sizes & time.

This project ideally should remain 100% free so it's evolution is unhindered. Everyone else would need to buy Particle Candy, which is not encouraging- but the opposite of that. Incidentally, Ckob did write his own particle engine, which isn't bad- I just started playing with it 2 days ago. For now, that'll work ok- I was trying to re-integrate it before I got sidetracked. I'm writing from work on break, so I can't do anything till tonight, but hopefully between the two of us, there'll be a 'shaping up' type update by the weekend.


Guy Fawkes(Posted 2009) [#138]
well, i can work with his particle engine, and possibly upgrade it. I learned from particle candy, and now I know what I'm doing ^^


Jiffy(Posted 2009) [#139]
Excellent. Be looking forward to your assistance.


Guy Fawkes(Posted 2009) [#140]
hehe, no probs man :)


Jiffy(Posted 2009) [#141]
Sent a bunch of stuff to Logbomb, he'll give me some feedback soon, otherwise I'll just keep working on integrating the particle lib back in. Minor hurdle is trying to decide how to best handle scene management and object hierarchy. The existing method is ok, but isn't very portable. Any suggestions (other than using Collada- which is prohibative) would be appreciated.


Guy Fawkes(Posted 2009) [#142]
hows it going, logbomb?


Jiffy(Posted 2009) [#143]
For the record, I just started using IDEal yesterday. and the benefits for me don't outweigh the limitations. I'll use it if everyone else is- but it irritates me, and won't let me do things I'm used to, some of which are pretty major- for example, all files should be in a subfolder from the main folder, not in a higher folder- which I do because of shared libraries. It will still use it- just not assign it as part of the project.

I'll probably be sending another batch of changes to Logbomb in a few days, and I'm wondering how distribution & crap should best be handled so others can jump in & lend a hand.


Guy Fawkes(Posted 2009) [#144]
well, use sourceforge

thats what logbomb did


Jiffy(Posted 2009) [#145]
Well- I'm not going to splinter the project, and he hasn't suggested access- not that it's essential. I was more talking along the lines of whether to bother with a cvs or 'latest post here' or what have you.


Guy Fawkes(Posted 2009) [#146]
has he emailed you back yet?


Jiffy(Posted 2009) [#147]
No- I assume he's busy or whatever. It's not a big deal- I'm still taking stuff apart & don't really want things mucked with till I've got it better sorted, but I think it would be good if people could see progress...

Still trying to sort out some of the server stuff. Still no suggestions for scene management. Whatever I do, don't bug me about it later...


Guy Fawkes(Posted 2009) [#148]
hey, back off. i wasn't bugging u in the 1st place. ur a part of this as much as i am, and i know as much as u do about this.


Jiffy(Posted 2009) [#149]
I didn't mean _you_ personally- sorry about that!
Just a turn of phrase...


Ginger Tea(Posted 2009) [#150]
i read that as "no ones given me direction about scene management, so im doing it my way. if you dont like it its not my problem"


Jiffy(Posted 2009) [#151]
That about covers it, thanks... ;^P


Guy Fawkes(Posted 2009) [#152]
ok. sorry. misread it. (not telling that to ginger tea), telling that to u jiffy


LogBomb(Posted 2009) [#153]
For the record, I just started using IDEal yesterday. and the benefits for me don't outweigh the limitations. I'll use it if everyone else is- but it irritates me, and won't let me do things I'm used to, some of which are pretty major- for example, all files should be in a subfolder from the main folder, not in a higher folder- which I do because of shared libraries. It will still use it- just not assign it as part of the project.


The folder structure was previously set up to be used with Ideal, including a working Ideal project file that I created for the client. I didn't find the old folder structure difficult to navigate or understand, and I am not entirely sure why you have re-arranged it.

It is absolutely essential, that for the client at least an IDE is used that handles projects. I can't understand how you could effectively navigate the client without project search features and management. Ideal is the most used and feature packed blitz specific IDE that handles projects and an Ideal project file needs to be included. In my experience, the limitations of the standard IDE are enormous. You can't undo more than 1 step, you can't view all the includes of a project, you can't view all the functions of a project, functions are not listed in alphabetical order, you can't minimize functions and most importantly you can't search the whole project. The only problem I can see with using Ideal is that you have re-arranged the folder structure.

IDEs and folder structures are not something that I planned on knocking heads over. I do understand that people have different approaches and preferences, but we seem to have run into a problem here.

The folder structure needs to remain the same as it was and a functional Ideal project file for the client needs to remain a part of the project.

If this is a problem, I wouldn't be offended at all if you created a project fork, with a new source forge page and your project became the main pursuit of what Ckob started. The license does allow for this.

Although, you will probably find that after a week of using Ideal, you will wonder how you ever survived with the standard IDE. All new software takes a little time to get used to. It is definitely worth persisting with ;)

Logbomb


Jiffy(Posted 2009) [#154]
You had BPpro and blitzui each in several folders, two different Globals.bb with globals that could be common, unshared.
Ideal forces this exclusivity of resources- which makes keeping the two states- server and client concurrent a little trickier- and we won't talk about the editor, or the future expansion of the project- because it will get bigger, and maintaining two project sets as separate will not be a huge burden- but keeping common resources shouldn't be unnatural- and as this project grows (and you can be sure it will), there will be more.

I don't care about multiple undo.
I don't need to see all the functions at once.
The alphabet is overrated. I'd rather know what something does, than which other function it follows or precedes.
Minimizing functions is neat.
Searching a whole project is swell.
Not letting me share resources is a pain.
The 'I' bar is friggin wide.
Deciding that when I hit a tab that I need to be past all whitespace is more than inconvenient.
Little irritations. I never said I wasn't going to use it. Most of the bonuses of IDEal really don't help me much. I organize and standardize fairly well. I can benefit from it's use, sure- but I really don't see 'wondering how I survived without it.' But hey- we'll see, right?

"The only problem I can see with Ideal is that you have re-arranged the folder structure."
Like I'm to blame.
Ok. Fine. I'll take it.
Me: "I'll use it if everyone else is- but it irritates me, and won't let me do things I'm used to,"
You: "IDEs and folder structures are not something that I planned on knocking heads over"
Me neither.

So, tell you what. Decide what you want, then let me know before I get to work, how you want it, so we not end up here again-- or- not bumping headswise- you can just do whatever you like and assign me specific tasks.

I didn't just arbitrarily decide to change things to irritate you- there's a good reason for my changes, and the idea of an MMO with a lot of content & 4 folders to jumble it into really can't work too neatly in the long run, but who am I to argue?

3 weeks ago I said:
"Unless anyone has any issues/suggestions with/for coding standards/organization, I'm making some organizational changes first.
If anyone's working but not posting, speak up now. "

2 weeks ago I listed my 'obviously not original' folder changes.

_Now_ you want to say IDEal is essential? When two weeks ago it was obvious the libs & includes were outside the client, server & tools folders- where IDEal wouldn't like them?

Apparently I was too hands on. So, you release an update with whatever of the found models or what have you, give me a task- I'll work from there.


LogBomb(Posted 2009) [#155]
Perhaps part of the issue is in how the project is viewed. It should be viewed more as 3 sub projects, the Client, the Editor and the Server.

Blitz play and blitzui are set libraries that are not going to change, so it is fine for those libraries to be in more than 1 folder. As it stands blitzui is in the world editor and client folders and blitzplay is inside the server and client include folders. It is not complicated.

The Globals files for the server and client are 2 separate files that are different. One is the globals file for the client and one is the globals file for the server. They are not the same file.

I changed the world editor so that it doesn't have it's own resource folders, is simply edits the client. This is simple and uncomplicated.

In the client there are 4 folders that handle in-game resources, sprites, misc, media and sky. All self explanatory and not particularly complicated. It should be made clear though, on the in-game resources issue, that we are not making an MMORPG. We are making an MMORPG engine and editor.

I have been harping on about Ideal because I have spent a huge amount of time in the source, and it wasn't until I persevered with Ideal, that I really started to get a handle on the inner workings of the source. And I did resist at first, being used to the standard IDE. Now that I have persisted with Ideal, there is no comparison. Having all includes listed, all functions listed and full project search is extremely valuable when you really start getting into the guts of the code. Hey, you might even thank me one day for being so pushy about it (^_^) I did actually set my version of Ideal up so it has all the same syntax highlighting colors as the standard IDE, and I turned strict mode off so you don't get all that red text (mind you, you are probably stricter with your variable declarations than I am).

Jiffy, when you showed interest, I knew that someone with the required ability had arrived, and I didn't want to discourage you. When I got your modifications and I could no longer load up my Ideal project file, and the folders had all been re-arranged, I deliberated for a time and then posted about it. My apologies for not saying something sooner, there was certainly opportunity.

The plan is (if you accept of course), that I will give you admin access to the source forge page and that you can take over the position of lead developer for the project (as I have heavy commercial project commitments) and I will maintain more of a consultation role and will be available for any questions about he inner workings of the source, as currently I have the most knowledge concerning the source. What do you think?

Logbomb


Guy Fawkes(Posted 2009) [#156]
Logbomb, jiffy, I'm quitting blitz. You have the fag ja2 to thank for that. So I will never be here again. I'm sorry. I wanted to help. But I have no choice.

Goodbye forever... :(


Leon Drake(Posted 2009) [#157]
/facepalm...... silly thread.

sad news, but glad that his memory will live on in this engine he worked on. I think i may convert this to bmax.


Jiffy(Posted 2009) [#158]
The client and the editor are not so far removed from each other as you might think- especially if you eventually allow people to build in any way.
Likewise, the data structures needed on client or server are different- but there will be some which must be synchronized. Having two different files for this is a little silly. Though you may not have noticed, I already did this. Globals, Globals_s, and globals_c are the resulting files.
4 folders may not be 'complicated', but 'misc', 'media' and 'sky' are not exactly informative, though simple. 'Sky' has sprites in it- all folders did actually. I 'fixed' this.
Making an MMORPG editor is what I actually embraced- hence the 'A sample Realm' and 'Your realm' folders. World authorship shouldn't be ridiculously personal ('I put skyboxes in the media folder, not the sky folder because those are underwater'). Media/gfx/skybox should work for any author who wants to build ina common way. 'Learning' where resources are as part of an MMO building team should not be an issue if it can be avoided. but a big jumble of hundreds of pics, odd-named folders, and models/sounds what have you can all go into 'media' or 'misc'. People will just re-ad what they can't find. Not my problem I suppose.
Planning for success is a bit different from just planning.

Ideal is neat. I set up my colors and what not too. but though I would grudgingly use it- in an open source enviorment, you do not need one more hurdle to limit collaboration. This isn't about me- this is about anyone else who may like some other IDE, or none if they prefer- and them not working on this project. I'd talk a bit about turning willing help away, valid standards/tool, or the old adage of 'beggars and choosers', but what it boils down to is moving things forward, and if you think not using IDEal is bad, then by all means...

I'm not taking over. I'll let go before I steal the wheel. I work full time too- and my hours suck, so I get little spare time to code even what I've done. I'm doing this entirely because I liked Ckob, and would like to help move his dream a little farther towards realization. That said, MMO projects fail constantly, and why should be addressed way before the 'behemoth' that The Servant might become stumbles under it's own weight- or stops at the firts hurdle because wheels werre faster than walking.

I'll finish my code for the B3d version of the server. You can take over from there. Let me know what's next.


Ross C(Posted 2009) [#159]
Good riddance, your moaning faced bigot. If your going to go, go, and stop boring everyone to death (BACK OFF!/ I've HAD IT WITH ALL YOU/ W/E i'm LEAVING), and, hoping people will lose their life to hackers.

You have pretty much contributed nothing to these forums (IMO), and your threads are now something to behold, due to the sheer disrespect you have towards people who *were* trying to help you. Come back when you've grown up a bit.


Leon Drake(Posted 2009) [#160]
Almost done Converting the BVProV1.0 to bmax.... yea yea i cheated and used the Vertex.Bnetex module for it.


Leon Drake(Posted 2009) [#161]
Here it is i have yet to test it but it compiles now.

Import Vertex.BNetEx

'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Constants=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'------These are the values that JoinSession will Return
Const BP_NOREPLY = 0			'No reply from host within 15 seconds
Const BP_IAMBANNED = 1			'Local player's IP has been banned
Const BP_GAMEISFULL = 2		'The game has maxed out players
Const BP_PORTNOTAVAILABLE = 3	'The Local port wasn't available
Const BP_SUCCESS = 4			'The game was joined!
Const BP_USERABORT = 5			'The user pushed ESC While joining
Const BP_INVALIDHOSTIP = 6		'The IP used For the Host was invalid
'------These are all the messages BP can generate For the End user:
Const BP_PLAYERHASJOINED = 255	'msgData = New player name|msgFrom = player's id
Const BP_PLAYERHASLEFT = 254	'msgData = T/F on If intentionally|msgFrom = player's id
Const BP_HOSTHASLEFT = 253		'msgData = T/F on If intentionally|msgFrom = old host's id
Const BP_PLAYERWASKICKED = 252	'msgData = Null|msgFrom = kicked player's id
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=Globals=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'---------------The following shouldn't be modified externally------------------
'**Although these ones might be useful To you**
Global BP_GameType			    'Type of game: (0-255)
Global BP_TotRecvPacket		'Packets received
Global BP_TotSentPacket		'Packets sent
Global BP_Host				    'T/F, am I the Host?
Global BP_Host_ID				'Host's ID #
Global BP_Host_IP				'Host's IP (in integer format)
Global BP_Host_Port			'Host's Port
Global BP_MaxPlayers = 255 	'Maximum # of players
Global BP_My_Name$				'Local player's Name
Global BP_My_ID				'Local player's ID #
Global BP_My_Port				'Local port being used by BlitzPlay
Global BP_NumPlayers			'How many players are connected To the game Right now
Global BP_LocalHost = BP_ConvertIP ("127:0:0:1")'integer Local loopback address
Global BP_Online = False		'T/F
Global BP_My_IP				'This computers IP: Set To Local If no IP
Global BP_LogFile$ = ""			'Define If you want logging enabled:
Global BP_TimeoutPeriod=15000	'How Long before we assuming connection dropped(in ms)
Global BP_Log:TStream					'Log file handle, 0 If logging disabled
Global BP_AutoLogging			'True Or False on If BP should internally do the logging
Global BP_UDPdebug			    'Odds (in ) that packets do Not get sent (For testing)
'**These ones probably Not as useful::

Global BP_UDP_Stream:TUDPStream			'UDP Stream handle
Global BP_CompressBank = CreateBank(4)'Bank used For converting Floats To Strings
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=Types=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Global NetInfo_list:TList = New TList
Global MsgInfo_list:TList = New TList
Global DiscID_list:TList = New TList
Global Connecting_list:TList = New TList
Global UnrecMsgQueue_list:TList = New TList
Global BannedPlayers_list:TList = New TList
Global Spline_list:TList = New TList

Type NetInfo
	Method New()
	
		ListAddLast(NetInfo_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(NetInfo_list,Self)
	
	End Method
					'--The general player info:
	Field Name$				'Player's Name
	Field Net_id			'Players unique ID #
	Field IP				'Ip::
	Field Port				'Port (really!)
	Field LastHeard		'When the last packet was received from them:
	Field Alive			'Boolean on If we think this player is still there
End Type

Type MsgInfo

	Method New()
	
		ListAddLast(MsgInfo_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(MsgInfo_list,Self)
	
	End Method
					'--Messages that have arrived are stored here
	Field msgData$			'actual packet contents
	Field msgType			'Msg Type(0-255)
	Field msgFrom			'ID of msg sender
End Type

Type DiscID

	Method New()
	
		ListAddLast(DiscID_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(DiscID_list,Self)
	
	End Method
						'--Keeps track of disconnects' ID's
	Field id				'ID of disconnect
End Type

Type Connecting

	Method New()
	
		ListAddLast(Connecting_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(Connecting_list,Self)
	
	End Method
					'--For players trying To connect
	Field Name$				'Connect name
	Field net_id			'New player's ID
	Field IP				'IP +
	Field Port				'Port
	Field LastHeard		'When the last packet was received from them:
	Field Alive			'Boolean on If we think this New connect is still trying
End Type

Type UnrecMsgQueue

	Method New()
	
		ListAddLast(UnrecMsgQueue_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(UnrecMsgQueue_list,Self)
	
	End Method
				'--Messages from unrecognized IP+Port
	Field msgData$			'Hm: Self explanatory:
	Field msgType
	Field IP				'Check against this IP To see If this player has joined yet
	Field Port
	Field Time				'These will be stored For up To 1 second Then disregarded
	Field net_id
End Type

Type BannedPlayers

	Method New()
	
		ListAddLast(BannedPlayers_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(BannedPlayers_list,Self)
	
	End Method
				'--List of IP's not to let in
	Field IP				'IP in 32bit Int form
End Type

'Splines
Type Spline

	Method New()
	
		ListAddLast(Spline_list,Self)
	
	End Method
	
	Method LDelete()
	
		ListRemove(Spline_list,Self)
	
	End Method

	Field x#[3]
	Field z#[3]
End Type


'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=Functions=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Function BP_BanIP (ip)
'-=-=-=Make it impossible For an IP To join
	Local alreadybanned = False
	For banned:BannedPlayers = EachIn BannedPlayers_list
		If banned.IP = ip Then alreadybanned = True
	Next
	If Not alreadybanned Then
		banned:BannedPlayers = New BannedPlayers
		banned.IP = ip
	End If
End Function

Function BP_ClearSession()
'-=-=-=Clears out any data that could be leftover from previous sessions:
	ClearList(NetInfo_list)
	ClearList(UnrecMsgQueue_list)
	ClearList(Connecting_list)
	ClearList(BannedPlayers_list)
	ClearList(MsgInfo_list)
	ClearList(DiscID_list)
	BP_TotSentPacket = 0
	BP_TotRecvPacket = 0
	BP_StopLogFile()
End Function

Function BP_ConvertIp (IP$)
'-=-=-=Convert an IP from x:x:x:x To integer format:
	Local dot1 = Int(Instr(IP$,":"))
	Local dot2 = Int(Instr(IP$,":",dot1+1))
	Local dot3 = Int(Instr(IP$,":",dot2+1))
	Local Octet1 = Int(Mid$(IP$,1,dot1-1))
	Local Octet2 = Int(Mid$(IP$,dot1+1,dot2-1))
	Local Octet3 = Int(Mid$(IP$,dot2+1,dot3-1))
	Local Octet4 = Int(Mid$(IP$,dot3+1))
	Return (((((Octet1 Shl 8) Or Octet2) Shl 8) Or Octet3) Shl 8) Or Octet4
End Function

Function BP_ConvertDomain (domain$)
'-=-=-=Converts from www:domain:com To integer IP address:
	Return HostIp(domain$,0)
End Function

Function BP_EndSession ()
'-=-=-=Disconnect from everything
	Local counter
	Local stime
	If BP_Online
		If BP_Host Then
			BP_UDPMessage (0,251,Chr$(BP_My_ID))
		Else
			BP_UDPMessage(BP_Host_ID,253,Chr$(BP_My_ID))
		End If
		BP_Online = False
	End If
	If BP_UDP_Stream Then
		BP_UDP_Stream.Close()
		'CloseUDPStream BP_UDP_Stream
		BP_UDP_Stream = Null
	End If
	BP_ClearSession()
	BP_StopLogFile()
End Function

Function BP_FindConnect:Connecting (IP, Port)
'-=-=-=Go through the Connecting Type list And search by IP+Port
	If IP = BP_My_IP Or IP = BP_LocalHost Then
		For c:Connecting = EachIn Connecting_list
			If (c.Port = Port) And ((c.IP = BP_My_IP) Or (c.IP = BP_LocalHost)) Then Return c
		Next
	Else
		For c:Connecting = EachIn Connecting_list
			If (c.Port = Port) And (c.IP = IP) Then Return c
		Next
	End If
End Function

Function BP_FindID:NetInfo(ID)
'-=-=-=Go through the NetInfo Type list And find a specific instance, based on the ID
	For nInfo:NetInfo = EachIn NetInfo_list
		If nInfo.net_id = ID Then Return nInfo
	Next
End Function

Function BP_FindIP:NetInfo(IP, Port)
'-=-=-=Find a NetInfo based on IP+Port Or just Port If in debug
	If IP = BP_My_IP Or IP = BP_LocalHost Then
		For nInfo:NetInfo = EachIn NetInfo_list
			If (nInfo.Port = Port) And ((nInfo.IP = BP_My_IP) Or (nInfo.IP = BP_LocalHost)) Then Return nInfo
		Next
	Else
		For nInfo:NetInfo = EachIn NetInfo_list
			If (nInfo.Port = Port) And (nInfo.IP = IP) Then Return nInfo
		Next
	End If
End Function

Function BP_FloatToStr$(num#)
'-=-=-=Convert a floating point number To a 4 Byte String
	Local st$ = "",i
	PokeFloat BP_CompressBank,0,num
	For i = 0 To 3 
		st$ = st$ + Chr$(PeekByte(BP_CompressBank,i))
	Next 
	Return st$ 
End Function

Function BP_GetGameType()
'-=-=-=Returns the currently set game Type
    Return BP_GameType
End Function

Function BP_GetHostID()
'-=-=-=Returns the Host ID
    Return BP_Host_ID
End Function

Function BP_GetHostIP()
'-=-=-=Returns the Host IP address
    Return BP_Host_IP
End Function

Function BP_GetHostPort()
'-=-=-=Returns the Host Port
    Return BP_Host_Port
End Function

Function BP_GetLogFileName$()
'-=-=-=Returns the currently set Log File name
    Return BP_LogFile$
End Function

Function BP_GetMaxPlayers()
'-=-=-=Returns the currently set Max Players value
    Return BP_MaxPlayers
End Function

Function BP_GetMyID()
'-=-=-=Returns this users ID
    Return BP_My_ID
End Function

Function BP_GetMyIP$()
'-=-=-=Returns this users IP address
	Local ip
	If HostIps("") Then ip = HostIp("") Else ip = BP_LocalHost
	Return DottedIP$(ip)
End Function

Function BP_GetMyName$()
'-=-=-=Returns this users name
	Return BP_My_Name$
End Function

Function BP_GetMyPort()
'-=-=-=Returns this users Port
	Return BP_My_Port
End Function

Function BP_GetNumberOfPlayers()
'-=-=-=Returns the Current number of players
	Return BP_NumPlayers
End Function

Function BP_GetPacketsReceived()
'-=-=-=Returns the number of packets that have been received
	Return BP_TotRecvPacket
End Function

Function BP_GetPacketsSent()
'-=-=-=Returns the number of packets that have been sent
	Return BP_TotSentPacket
End Function

Function BP_GetPlayerName$(ID)
'-=-=-=Find a player's name based on the ID
    'nInfo:NetInfo = NetInfo
	For nInfo:NetInfo = EachIn NetInfo_list
		If nInfo.net_id = ID Then Return nInfo.Name$
	Next
End Function

Function BP_GetTimeoutPeriod()
'-=-=-=Returns the Current Timeout Period
    Return BP_TimeoutPeriod / 1000
End Function

Function BP_HostSession(BP_HostName$,MaxPlayers,GameType,LocalPort,TimeoutPeriod)
'-=-=-=Host the game
'First clear out any Left over data from a previous session
	BP_ClearSession()
'Now initialize the Host information And open the specified port:
	BP_NumPlayers = 1
	BP_MaxPlayers = MaxPlayers
	BP_Host = True
	BP_My_IP = BP_ConvertIP(BP_GetMyIP())
	BP_My_Port = LocalPort
	BP_Host_Port = BP_My_Port
	BP_Host_ID = 1
	BP_Host_IP = BP_My_IP
	nInfo:NetInfo = New NetInfo
	nInfo.IP = BP_My_IP
	nInfo.Port = BP_My_Port
	nInfo.Name = BP_HostName$
	BP_My_Name = BP_HostName$
	BP_My_ID = 1
	nInfo.net_id = 1
	'BP_UDP_Socket = CreateUDPSocket()
	'ConnectSocket( socket:TSocket,remoteIp,remotePort )
	'BindSocket( BP_UDP_Socket,BP_Host_Port )
	'SocketListen( BP_UDP_Socket,0 )
	BP_UDP_Stream = New TUDPStream
	BP_UDP_Stream.Init()
	BP_UDP_Stream.SetLocalPort(BP_Host_Port)
'And set up the game information
	BP_GameType = GameType
	BP_TimeoutPeriod = TimeoutPeriod * 1000	'TimeoutPeriod is converted To milliseconds
	If BP_UDP_Stream Then BP_Online = True Else BP_Online = False
	Return BP_Online
End Function

Function BP_IntToStr$(Num, StrLen = 4)
'-=-=-=Take an Integer And compress it To a String, of "strlen" bytes Long:
	Local shiftin
	Local st$ = Chr$(num And 255)
	For shiftin = 1 To (strlen - 1)
		st$ = st$ + Chr$(num Sar (8 * shiftin))
	Next
	Return st
End Function 

Function BP_JoinSession (ClientName$,LocalPort,strHostIP$,HostPort)
'-=-=-=Join a game already in progress
'JoinSession will Return:	0=No reply from BP_Host	1=This IP is banned
'							2=Game is full			3=Local port Not available
'							4=Joined game!
'Also notice the constants which coincide w/ these values:
'		BP_NOREPLY, BP_IAMBANNED, BP_GAMEISFULL, BP_PORTNOTAVAILABLE, BP_SUCCESS
	Local starttime
	Local reason
	Local counter
	Local curTime
	Local msg:MsgInfo
'Clear out any Left over data from a previous session And initialize this session
	BP_ClearSession()

	'Directly convert the Host's IP into an integer, to test to see if the IP entered is simply a number (w/ no periods)
	intHostIP = Int(strHostIP)
	If intHostIP Then	'First, error check For valid IP's
		If Not(Instr(strHostIP, ":")) Then
			BP_UpdateLog ("Connection attempt aborted: Host IP is invalid:")
			Return BP_INVALIDHOSTIP
		End If
	End If

	'Now, convert the IP/Domain To an integer
	intHostIP = BP_ConvertDomain(strHostIP)
	BP_UpdateLog ("New connection attempt for " + ClientName + " on Port " + LocalPort + ": Server: " + DottedIP$(intHostIP) + ":" + HostPort)

	'Error check again
	If Not(intHostIP) Then
		BP_UpdateLog ("Connection attempt aborted: Host IP is invalid:")
		Return BP_INVALIDHOSTIP
	End If

	BP_Host = False
	BP_My_IP = BP_ConvertIP(BP_GetMyIP())
	BP_My_Port = LocalPort
	BP_Host_IP = intHostIP
	BP_Host_Port = HostPort

'Start connecting with BP_Host
	'BP_UDP_Socket = CreateUDPSocket()
	'BindSocket( BP_UDP_Socket,BP_My_Port )
	'isconnected = ConnectSocket( BP_UDP_Socket,BP_Host_IP,BP_Host_Port )
	'SocketListen( BP_UDP_Socket,0 )
	BP_UDP_Stream = New TUDPStream
	BP_UDP_Stream.Init()
	BP_UDP_Stream.SetLocalPort(BP_My_Port)
	
	If BP_UDP_Stream Then
		BP_UDPSend (Chr$(254) + Chr$(0) + Chr$(1) + ClientName, BP_Host_IP, BP_Host_Port)
		BP_NumPlayers = 255

		starttime = MilliSecs()

		reason = 0
		BP_Online = True

'Receive info on game session as well as other player information
		Repeat
			BP_UpdateNetwork ()
			If (MilliSecs() - starttime) > 15000 Then
				BP_Online = False
				Exit
			End If
			For msg:MsgInfo = EachIn MsgInfo_list
				If msg.msgType = 256 Then
					reason = Int(msg.msgData)
					BP_Online = False
					Exit
				End If
			Next
			counter = 0
			For nInfo:NetInfo = EachIn NetInfo_list
				counter = counter + 1
			Next
			If counter = BP_NumPlayers Then
				reason = 4
				BP_Online = True
				Exit
			End If
			If KeyHit(1) Then
				reason = BP_USERABORT
				BP_Online = False
			End If
		Until reason

		If BP_Online Then
			nInfo:NetInfo = New NetInfo
			nInfo.Name = ClientName
			nInfo.net_id = BP_My_ID
			nInfo.IP = BP_My_IP
			nInfo.Port = BP_My_Port
			nInfo.Alive = True

            BP_My_Name$ = ClientName
			BP_UDPSend (Chr$(254) + Chr$(0) + Chr$(2), BP_Host_IP, BP_Host_Port)
			BP_NumPlayers = BP_NumPlayers + 1
			For nInfo:NetInfo = EachIn NetInfo_list
				If nInfo.net_id = BP_Host_ID Then
					nInfo.IP = BP_Host_IP
					nInfo.Port = BP_Host_Port
				End If
			Next
		Else
			If BP_UDPStream Then BP_UDP_Stream.Close() 
			BP_UDP_Stream = Null
		End If
	Else
		BP_Online = False
		reason = BP_PORTNOTAVAILABLE
	End If
	Return reason
End Function

Function BP_KickID (id, ban = False)
	Local msg:MsgInfo
'-=-=-=Kick an ID, maybe even ban 'em
	If BP_My_ID = BP_Host_ID Then
		nInfo:NetInfo = BP_FindID(id)
		If nInfo<>Null And id <> BP_My_ID Then
			BP_UDPMessage(0, 249, Chr$(id)+Chr$(ban))
			msg:MsgInfo = New MsgInfo
			msg.msgType = 252
			msg.msgFrom = id
			msg.msgData = ban
			If ban Then
				BP_BanIP (nInfo.IP)
				If BP_Log Then BP_UpdateLog ("You banned: " + nInfo.Name)
			Else
				If BP_Log Then BP_UpdateLog ("You kicked: " + nInfo.Name)
			End If
			nInfo.LDelete() 
			BP_NumPlayers = BP_NumPlayers - 1
		End If
	End If
End Function

Function BP_NextAvailID ()
'-=-=-=Find out the Next available ID # that is Not in use
	Local testing
	Local foundit
	Local temp_array[256]

	For nInfo:NetInfo = EachIn NetInfo_list
		temp_array[nInfo.net_id] = True
	Next

	For testing = 1 To BP_MaxPlayers
		If Not temp_array[testing] Then
			foundit = testing
			Exit
		End If
	Next
	Return foundit
End Function

Function BP_SetGameType(GameType)
'-=-=-=Allows the user To control the numeric game Type value
	If BP_My_ID = BP_Host_ID Then
	    BP_GameType = GameType
		BP_UDPMessage(0,248,"1"+GameType)
	End If
End Function

Function BP_SetMaxPlayers(MaximumPlayers)
'-=-=-=Allows the user To control the maximum allowable players
	If (BP_My_ID = BP_Host_ID) Then
		If MaximumPlayers > 255 Then MaximumPlayers = 255
		If MaximumPlayers < 0 Then MaximumPlayers = 0
	    BP_MaxPlayers = MaximumPlayers
		BP_UDPMessage(0,248,"2"+MaximumPlayers)
	End If
End Function

Function BP_SetTimeoutPeriod(TimeoutPeriod)
'-=-=-=Allows the user To set Or change the TimeoutPeriod value
    BP_TimeoutPeriod = TimeoutPeriod
End Function

Function BP_SimulatePacketLoss(Odds)
'-=-=-=Allows the user To control simulated packet loss
    BP_UDPdebug = Odds
End Function

Function BP_StartLogFile(FileName$, Append = True, Automatic = True)
'-=-=-=Opens up the Log file: Also, optionally appends To the file instead of overwriting:
'Will only start a Log If there isn't one already, and if the filename is valid:
	If (Len(FileName$) > 0) And (BP_Log = Null) Then
		BP_LogFile$ = FileName$
		BP_AutoLogging = Automatic
		'Check To see If the file exists already
		If FileType(FileName$) = 1 Then
			Select Append	'If it does, check To see If we're going to append or overwrite
				Case True
					BP_Log = OpenFile (FileName$)
					SeekStream (BP_Log, FileSize(FileName$))
					WriteLine BP_Log, ""
				Case False
					DeleteFile FileName$
					BP_Log = WriteFile (FileName$)
			End Select
		Else
			BP_Log = WriteFile (FileName$)
		End If			
		'Now that the file is opened, insert the header information
		WriteLine BP_Log, "**Logging enabled at " + CurrentTime$() + " for " + BP_GetMyName() + ":"
		If BP_Online Then
			WriteLine BP_Log, "Connection Status: Online  Local IP/Port = " + DottedIP$(Int(BP_GetMyIP())) + "/" + BP_GetMyPort() + "  Host IP/Port = " + DottedIP$(Int(BP_GetHostIP())) + "/" + BP_GetHostPort()
		Else
			WriteLine BP_Log, "Connection Status: Offline  Local IP/Port = " + DottedIP$(Int(BP_GetMyIP())) + "/" + BP_GetMyPort() + "  Host IP/Port = " + DottedIP$(Int(BP_GetHostIP())) + "/" + BP_GetHostPort()
		End If
		WriteLine BP_Log, "Current Session Stats: GameType = " + BP_GetGameType() + "  NumPlayers = " + BP_GetNumberOfPlayers() + "  Local ID/Host ID = " + BP_GetMyID() + "/" + BP_GetHostID()
	EndIf
End Function

Function BP_StopLogFile()
'-=-=-=Allows the user To stop the logfile
	If BP_Log
		WriteLine BP_Log, "**Logging stopped at " + CurrentTime$() + ":"
		CloseFile BP_Log
		BP_Log = Null
	End If
	BP_AutoLogging = False
End Function

Function BP_StrToInt(st$)
'-=-=-=Take a String of any length And turn it into an integer again:
	Local shiftin
	Local num
	For shiftin = 0 To (Len (st$) - 1)
		num = num Or (Asc (Mid$ (st$, shiftin + 1, 1)) Shl shiftin * 8)
	Next
	Return num
End Function

Function BP_StrToFloat#(st$)
'-=-=-=Take a 4 Byte String And turn it back into a floating point #:
	Local num#,i
	For i = 0 To 3
		PokeByte BP_CompressBank,i,Asc(Mid$(st$,i+1,1))
	Next
	num# = PeekFloat(BP_CompressBank,0)
	Return num
End Function

Function BP_UnbanIP (ip)
'-=-=-=Allow an IP To join again
	For banned:BannedPlayers = EachIn BannedPlayers_list
		If banned.IP = ip Then banned.LDelete()
	Next
End Function

Function BP_UpdateNetwork ()		'This is the -meat- of the library:
'-=-=-=Check For messages, disconnects, New players, And UDP resends:
	'First lets get the variables defined as Local To this Function only
	Local curTime
	Local senderIP
	Local senderPort
	Local msgLength
	Local msgType
	Local msgTarget
	Local msgToSend$
	Local msgData$
	Local reading
	Local counter
	Local allowed
	Local kickedID
	Local newmsg
	Local msg:MsgInfo
	'Local nInfo:NetInfo
'***Check UDP Messages first
	If BP_Host
		While BP_Online
			senderIP = BP_UDP_Stream.RecvMsg()
			If senderIP Then
				curTime = MilliSecs ()
				BP_TotRecvPacket = BP_TotRecvPacket + 1
				senderPort = BP_UDP_Stream.GetMsgPort()
				msgLength = BP_UDP_Stream.RecvAvail() - 2		'(-2 For the BP Header)
				msgType = BP_UDP_Stream.ReadByte()			'1 Byte For the msg Type
				msgTarget = BP_UDP_Stream.ReadByte()			'1 For the message target

				nInfo:NetInfo = BP_FindIP (senderIP, senderPort)
				If nInfo<>Null Then nInfo.lastHeard = curTime 
				nInfo.Alive = True	'Make sure we don't timeout

				msgData$ = ""
				For reading = 1 To msgLength
					msgData$ = msgData$ + Chr$ ( BP_UDP_Stream.ReadByte())
				Next

				Select msgType
					Case 255			'If it was a keep alive packet
						If nInfo <> Null Then
							nInfo.LastHeard = curTime
							nInfo.Alive = True
						End If

					Case 254			'A packet with connecting info For a New player
						Select Asc(msgData)
							Case 1
								c:Connecting = BP_FindConnect (senderIP, senderPort)
								If c = Null Then	'New join! Time To see If we'll let 'em in
									'check To see that they aren't banned
									'allowed is the code that we assign To this connect
									'1 = banned|2 = no room|4 = allowed!
									allowed = BP_SUCCESS
									For banned:BannedPlayers = EachIn BannedPlayers_list
										If banned.ip = senderIP Then allowed = BP_IAMBANNED
									Next
									'make sure there's room, counting people in middle of connecting
									counter = 0
									For ccount:Connecting = EachIn Connecting_list
										counter = counter + 1
									Next
									If (BP_NumPlayers + counter) => BP_MaxPlayers Then allowed = BP_GAMEISFULL
									If allowed = BP_SUCCESS Then
										c:Connecting = New Connecting
										c.Name = Mid$ (msgData,2)
										c.net_id = BP_NextAvailID ()
										c.IP = senderIP
										c.Port = senderPort
										c.LastHeard = curTime
										msgToSend$ = Chr$(254) + Chr$(BP_My_ID) + Chr$(1) + Chr$(c.net_id) + Chr$(BP_My_ID) + Chr$(BP_NumPlayers) + Chr$(BP_MaxPlayers) + Chr$(BP_GameType) + Chr$(BP_TimeoutPeriod/1000)
										BP_UDPSend (msgToSend, c.IP, c.Port)
										For nInfo:NetInfo = EachIn NetInfo_list
											msgToSend = Chr$(254) + Chr$(BP_My_ID) + Chr$(2) +  Chr$(nInfo.net_id) + nInfo.Name
											BP_UDPSend (msgToSend, c.IP, c.Port)
										Next
										If BP_Log Then BP_UpdateLog (c.Name + " is attempting to join the game::")
									Else
										msgToSend = Chr$(254) + Chr$(BP_My_ID) + Chr$(3) + Chr$(allowed)
										BP_UDPSend (msgToSend, senderIP, senderPort)
									End If
								End If
							Case 2
								c:Connecting = BP_FindConnect(senderIP, senderPort)
								If c<>Null Then
									sendmsg$ = Chr$(c.net_id) + c.Name
									BP_UDPMessage (0,252,sendmsg)
									nInfo:NetInfo = New NetInfo
									nInfo.name = c.name
									nInfo.IP = senderIP
									nInfo.Port = senderPort
									nInfo.net_id = c.net_id
									nInfo.LastHeard = curtime
									nInfo.Alive = True
									c.LDelete() 
									msg:MsgInfo = New MsgInfo
									msg.msgType = 255
									msg.msgFrom = nInfo.net_id
									msg.msgData = nInfo.Name
									BP_NumPlayers = BP_NumPlayers + 1
									If BP_Log Then BP_UpdateLog (nInfo.name + " has joined the game from " + DottedIP$(nInfo.IP) + ":" + nInfo.Port + " ID #" + nInfo.net_id)
								End If
						End Select

					Case 253			'Someone has Left the game
						nInfo:NetInfo = BP_FindID(Asc(msgData))	'Since this player is the Host, Then tell everyone
						If nInfo<>Null Then						'Else about it too
							disc_id = nInfo.net_id
							msg:MsgInfo = New MsgInfo
							msg.msgData = True
							msg.msgType = BP_PLAYERHASLEFT
							msg.msgFrom = nInfo.net_id
							If BP_Log Then BP_UpdateLog (nInfo.Name + " has left the game:")
							nInfo.LDelete() 
							BP_UDPMessage(0,253,Chr$(disc_id) + Chr$(True))
							For c:connecting = EachIn connecting_list
								msgToSend$ = Chr$(253) + Chr$(BP_My_ID) + Chr$(disc_id) + Chr$(True)
								BP_UDPSend (msgToSend, c.IP, c.Port)
							Next
							BP_NumPlayers = BP_NumPlayers - 1
						End If

					Case 252		'Someone has successfully joined the game

					Case 251		'The Host has disconnected

					Case 250		'This was a "are you still there??" packet from someone:
						BP_UDPSend (Chr$(255) + Chr$(BP_My_ID) + "yup", senderIP, senderPort)

					Case 249		'Someone got kicked

					Default			'Nothing internal, a user packet:
						nInfo2:NetInfo = nInfo
						If nInfo2 <> Null Then	'Do we recognize the sender?
							If msgTarget <> BP_My_ID Then
								If msgTarget = 0 Then			'If its a UDP broadcast::
									msgToSend$ = Chr$(msgType) + Chr$(nInfo2.net_id) + msgData
									For nInfo:NetInfo = EachIn NetInfo_list
										If nInfo.net_id <> BP_My_ID And nInfo.net_id <> nInfo2.net_id Then
											BP_UDPSend (msgToSend, nInfo.IP, nInfo.Port)
										End If
									Next
								Else							'Ah, a specific target:
									msgToSend$ = Chr$(msgType) + Chr$(nInfo2.net_id) + msgData
									nInfo:NetInfo = BP_FindID (msgTarget)
									BP_UDPSend (msgToSend, nInfo.IP, nInfo.Port)
								End If
							End If	

							If msgTarget = 0 Or msgTarget = BP_My_ID Then
								msg:MsgInfo = New MsgInfo
								msg.msgData = msgData
								msg.msgType = msgType
								msg.msgFrom = nInfo2.net_id
								nInfo2.LastHeard = curtime
								nInfo2.Alive = True
								If BP_AutoLogging Then BP_UpdateLog ("[Incoming] From: " + LSet$(nInfo2.Name,20) + " Type: " + LSet$(msgType,3) + " {" + msgData$ + "}")
							End If
						Else
							msgq:UnrecMsgQueue = New UnrecMsgQueue
							msgq.msgData = msgData
							msgq.msgType = msgType
							msgq.IP = senderIP
							msgq.Port = senderPort
							msgq.Time = curTime
						End If
				End Select
			Else
				Exit			'Ah finally done receiving UDP messages? Outta this loop Then!
			End If
		Wend

		curTime = MilliSecs ()

		If BP_Online		'Have To check again because something *could* have made us offline in prev loop
			'Now look through messages from unrecognized players And see If they've recently joined
			For msgq:UnrecMsgQueue = EachIn UnrecMsgQueue_list
				nInfo:NetInfo = BP_FindIP(msgq.IP, msgq.Port)
				If nInfo <> Null Then
					msg:MsgInfo = New MsgInfo
					msg.msgData = msgData
					msg.msgType = msgType
					msg.msgFrom = nInfo.net_id
					If BP_AutoLogging Then BP_UpdateLog ("[Incoming] From: " + LSet$(nInfo.Name,20) + " Type: " + LSet$(msg.msgType,3) + " {" + msg.msgData$ + "}")
					msgq.LDelete()
				Else
					If (msgq.Time + 1000) < curTime Then msgq.LDelete() 
				End If
			Next		

			'Check To see who might have been disconnected
			For nInfo:NetInfo = EachIn NetInfo_list
				If nInfo.net_id <> BP_My_ID Then
					If ((nInfo.LastHeard + (BP_TimeoutPeriod / 2)) < curTime) And (nInfo.Alive) Then	'It's been 5 secs?
						BP_UDPMessage (nInfo.net_id, 250, "hello?")
						nInfo.Alive = False
						If BP_Log Then BP_UpdateLog (nInfo.Name + " hasn't been heard from in: " + (BP_TimeoutPeriod/1000) + " seconds: Testing to see if still connected:")
					End If
					If ((nInfo.LastHeard + BP_TimeoutPeriod) < curTime) And (nInfo.Alive = False) Then					'It's been 10 secs!?
						disc_id = nInfo.net_id
						msg:MsgInfo = New MsgInfo
						msg.msgType = BP_PLAYERHASLEFT
						msg.msgFrom = nInfo.net_id
						msg.msgData = False
						BP_UDPMessage (disc_id,249,Chr$(disc_id))
						If BP_Log Then BP_UpdateLog (nInfo.Name + " has lagged out of the game:")
						nInfo.LDelete() 
						BP_UDPMessage (0,253,Chr$(disc_id) + Chr$(False))
						BP_NumPlayers = BP_NumPlayers - 1
					End If
				End If
			Next
			'Scan through the list of people connecting, And see If we haven't heard from them in 10 secs		
			For c:Connecting = EachIn Connecting_list
				If (c.LastHeard + BP_TimeoutPeriod) < curTime Then						'It's been 10 secs!?
					If BP_Log Then BP_UpdateLog (c.Name + " didn't reply fast enough: Deleting from connecting queue:")
					c.LDelete()
				End If
			Next
		End If
'***************************Client's UpdateNetwork
	Else	
		While BP_Online
			senderIP = BP_UDP_Stream.RecvMsg()
			If senderIP = BP_Host_IP Then
				curTime = MilliSecs ()
				nInfo:NetInfo = BP_FindID (BP_Host_ID)
				If nInfo<>Null Then 
				nInfo.lastHeard = curTime
				nInfo.Alive = True
				EndIf
				BP_TotRecvPacket = BP_TotRecvPacket + 1
				senderPort = BP_UDP_Stream.GetMsgPort()
				'Msg will be in format: 123 1=Type|2=Sender|3=Data
				msgLength = BP_UDP_Stream.RecvAvail() - 2		'(-2 For the 2 bytes being read as the header)
				msgType = BP_UDP_Stream.ReadByte()			'1 Byte For the msg Type
				msgFrom = BP_UDP_Stream.ReadByte()			'1 Byte For the msg sender
				msgData$ = ""
				For reading = 1 To msgLength
					msgData$ = msgData$ + Chr$ (BP_UDP_Stream.ReadByte())
				Next

				Select msgType
					Case 255			'If it was a keep alive packet::
						nInfo:NetInfo = BP_FindIP (senderIP, senderPort)
						If nInfo<>Null Then
							nInfo.LastHeard = curTime
							nInfo.Alive = True
						End If

					Case 254			'A packet with connecting info For a New player
						Select Asc(msgData)
							Case 1
								BP_My_ID = Asc(Mid$(msgData,2))
								BP_Host_ID = Asc(Mid$(msgData,3))
								BP_NumPlayers = Asc(Mid$(msgData,4))
								BP_MaxPlayers = Asc(Mid$(msgData,5))
								BP_GameType = Asc(Mid$(msgData,6))
								BP_TimeoutPeriod = Asc(Mid$(msgData,7)) * 1000
							Case 2
								nInfo:NetInfo = BP_FindID(Asc(Mid$(msgData,2)))
								If nInfo=Null Then
									msgData = Mid$(msgData,2)
									nInfo:NetInfo = New NetInfo
									nInfo.net_id = Asc(Mid$(msgData,1))
									nInfo.Name = Mid$(msgData,2)
									nInfo.Alive = True
									nInfo.LastHeard = curTime
									msg:MsgInfo = New MsgInfo
									msg.msgType = 255
									msg.msgFrom = nInfo.net_id
									msg.msgData = nInfo.Name
									
								End If
							Case 3
								reason = Asc(Mid$(msgData,2,1))
								msg:MsgInfo = New MsgInfo
								msg.msgType = 256
								msg.msgFrom = 0
								msg.msgData = reason
						End Select

					Case 253			'Someone has Left the game
						nInfo:NetInfo = BP_FindID(Asc(msgData))	'If they're still in the game
						If nInfo<>Null Then
							msg:MsgInfo = New MsgInfo			'And make a New msg about it
							msg.msgData = Asc(Mid$(msgData,2))
							msg.msgType = 254
							msg.msgFrom = nInfo.net_id
							nInfo.LDelete()
							BP_NumPlayers = BP_NumPlayers - 1
							If BP_Log Then
								If msg.msgData Then BP_UpdateLog (nInfo.Name + " has left the game:") Else BP_UpdateLog (nInfo.Name + " has lagged out of the game:" + nInfo.net_id)
							End If
						End If

					Case 252		'Someone has successfully joined the game
						curTime = MilliSecs ()
						nInfo:NetInfo = New NetInfo
						nInfo.net_id = Asc(Mid$(msgData,1))
						nInfo.Name = Mid$(msgData,2)
						nInfo.LastHeard = curtime
						nInfo.Alive = True
						BP_NumPlayers = BP_NumPlayers + 1
						msg:MsgInfo = New MsgInfo
						msg.msgData = nInfo.Name
						
						msg.msgType = 255
						msg.msgFrom = nInfo.net_id
						If BP_Log Then BP_UpdateLog (nInfo.Name + " has joined the game w/ ID #" + nInfo.net_id)

					Case 251		'The Host has disconnected
						nInfo:NetInfo = BP_FindID(Asc(msgData))
						If nInfo<>Null Then
							BP_Online = False
							BP_UDP_Stream.Close()
							BP_UDP_Stream = Null
							msg:MsgInfo = New MsgInfo
							msg.msgType = 253
							msg.msgFrom = nInfo.net_id
							msg.msgData = True
							ClearList(NetInfo_list)
							BP_NumPlayers = 0
						End If
						If BP_Log Then BP_UpdateLog ("The Host ended the session:")

					Case 250		'This was a "are you still there??" packet from someone:
						BP_UDPSend (Chr$(255) + Chr$(BP_My_ID) + "yup", senderIP, senderPort)

					Case 249		'Someone got kicked
						kickedID = Asc(msgData)
						nInfo:NetInfo = BP_FindID(kickedID)
						If nInfo <> Null Then
							msg:MsgInfo = New MsgInfo
							msg.msgType = 252
							msg.msgFrom = nInfo.net_id
							msg.msgData = Asc(Mid$(msgData,2))
							If BP_Log Then
								If msg.msgData Then BP_UpdateLog (nInfo.Name + " was banned") Else BP_UpdateLog (nInfo.Name + " was kicked")
							End If
							If kickedID = BP_My_ID Then
								ClearList(NetInfo_list)
								BP_Online = False
								BP_UDP_Stream.Close()
								BP_UDP_Stream = Null
								BP_NumPlayers = 0
								Return
							Else
								nInfo.LDelete() 
								BP_NumPlayers = BP_NumPlayers - 1
							End If
						End If

					Case 248
						Select Asc(msgData)
							Case 1
								BP_GameType = Asc(Mid$(msgData,2))
							Case 2
								BP_MaxPlayers = Asc(Mid$(msgData,2))
						End Select

					Default			'Nothing 'special'
						nInfo:NetInfo = BP_FindID(msgFrom)
						curTime = MilliSecs ()
						If nInfo <> Null Then
							msg:MsgInfo = New MsgInfo
							msg.msgData = msgData
							msg.msgType = msgType
							msg.msgFrom = msgFrom
							nInfo.LastHeard = curtime
							nInfo.Alive = True
							If BP_AutoLogging Then BP_UpdateLog ("[Incoming] UDP From: " + LSet$(nInfo.Name,20) + " Type: " + LSet$(msgType,3) + " {" + msgData$ + "}")
						Else
							msgq:UnrecMsgQueue = New UnrecMsgQueue
							msgq.msgData = msgData
							msgq.msgType = msgType
							msgq.net_id = msgFrom
							msgq.Time = curTime
						End If
				End Select
			Else
				Exit			'Ah finally done receiving UDP messages? Outta this loop Then!
			End If
		Wend

		If BP_Online		'Have To check again because something *could* have made us offline in prev loop
			curTime = MilliSecs ()
			'Now look through messages from unrecognized players And see If they've recently joined
			For msgq:UnrecMsgQueue = EachIn UnrecMsgQueue_list
				nInfo:NetInfo = BP_FindID(msgq.net_id)
				If nInfo <> Null Then
					msg:MsgInfo = New MsgInfo
					msg.msgData = msgData
					msg.msgType = msgType
					msg.msgFrom = nInfo.net_id
					If BP_AutoLogging Then BP_UpdateLog ("[Incoming] From: " + LSet$(nInfo.Name,20) + " Type: " + LSet$(msg.msgType,3) + " {" + msg.msgData$ + "}")
					msgq.LDelete() 
				Else
					If (msgq.Time + 1000) < curTime Then msgq.LDelete() 
				End If
			Next		

			'Check For disconnection from Host
			nInfo:NetInfo = BP_FindID (BP_Host_ID)
			If nInfo<>Null
				If ((nInfo.LastHeard + (BP_TimeoutPeriod/2)) < curTime) And (nInfo.Alive) Then	'It's been awhile::
					BP_UDPMessage (nInfo.net_id, 250, "hello?")
					nInfo.Alive = False
				End If
				If ((nInfo.LastHeard + BP_TimeoutPeriod) < curTime) And (nInfo.Alive = False) Then	'It's been BP_TimeoutPeriod secs!?
					BP_Online = False
					BP_UDP_Stream.Close()
					BP_UDP_Stream = Null
					msg:MsgInfo = New MsgInfo
					msg.msgType = 253
					msg.msgFrom = nInfo.net_id
					ClearList(NetInfo_list)
					BP_NumPlayers = 0
					If BP_Log Then BP_UpdateLog ("Host hasn't replied in " + (BP_TimeoutPeriod/1000) + " seconds, game ended")
				End If
			End If'If nInfo<>Null
		End If'If BP_Online
	End If'If BP_Host
End Function


Function BP_UDPSend (msg$, IP, Port)
'-=-=-=Sends the UDP message, Byte by Byte:
	Local odds
	Local writing
	BP_TotSentPacket = BP_TotSentPacket + 1
	If BP_UDPdebug Then
		odds = Rand (1,100)
		If odds < (100 - BP_UDPdebug) Then
		BP_UDP_Stream.SetRemoteIP(TNetwork.IntIP(IP))
		BP_UDP_Stream.SetLocalPort()
		BP_UDP_Stream.SetRemotePort(Port)
			For writing = 1 To Len(msg)
				 BP_UDP_Stream.WriteByte( Asc ( Mid$ (msg,writing,1)))
			Next
			'SendUDPMsg BP_UDP_Stream, IP, Port
		End If
	Else
		BP_UDP_Stream.SetRemoteIP(TNetwork.IntIP(IP))
		BP_UDP_Stream.SetLocalPort()
		BP_UDP_Stream.SetRemotePort(Port)	
		For writing = 1 To Len(msg)
			 BP_UDP_Stream.WriteByte( Asc ( Mid$ (msg,writing,1)))
		Next
		'SendUDPMsg BP_UDP_Stream, IP, Port
	End If
End Function

Function BP_UDPMessage (msgTarget, msgType, msgData$, unusedRE = False, unusedIN = False)
'-=-=-=Prepare a UDP message To send:
	Local curTime
	If BP_Online
'Insert the message Type
		If BP_Host
			If msgTarget = 0 Then			'If its a UDP broadcast::
				msgData = Chr$(msgType) + Chr$(BP_My_ID) + msgData
				For nInfo:NetInfo = EachIn NetInfo_list
					If nInfo.net_id <> BP_My_ID Then
						If BP_AutoLogging Then BP_UpdateLog ("[Outgoing] UDP   To: " + LSet$(nInfo.Name,20) + " Type: " + LSet$(msgType,3) + " {" + msgData + "}")
						BP_UDPSend (msgData, nInfo.IP, nInfo.Port)
					End If
				Next
			Else	'Ah, a specific target:
				msgData = Chr$(msgType) + Chr$(BP_My_ID) + msgData
				nInfo:NetInfo = BP_FindID (msgTarget)
				If BP_AutoLogging Then BP_UpdateLog ("[Outgoing] UDP   To: " + LSet$(nInfo.Name,20) + " Type: " + LSet$(msgType,3) + " {" + msgData + "}")
				BP_UDPSend (msgData, nInfo.IP, nInfo.Port)
			End If
		Else	'Client doing a send
			msgData = Chr$(msgType) + Chr$(msgTarget) + msgData
			If BP_AutoLogging Then BP_UpdateLog ("[Outgoing] UDP   To: " + msgTarget + " Type: " + LSet$(msgType,3) + " {" + msgData + "}")
			BP_UDPSend (msgData, BP_Host_IP, BP_Host_Port)
		End If
	End If
End Function


Function BP_UpdateLog (txt$)
'-=-=-=Updates the Log file, checks To see If its been started
	If BP_Log Then
		WriteLine BP_Log, txt$
	End If
End Function



Leon Drake(Posted 2009) [#162]
Wewt. ok have some bugs in the source i posted above which im slowly getting them out. however i just got the entire Server app converted over to bmax and was able to connect to it using the B3d Servant client.

regardless if this MMO is going to be written in b3d i think its a good idea to have the server built under bmax. mainly so you can compile it to run on linux servers. :D

i'll be posting the source once i get the server to run correctly.


Leon Drake(Posted 2009) [#163]
Alright got a working version of the Servant Server under blitzmax. So far i didn't get any bugs.... yet

here is the download link

http://www.endsoflegend.com/ServantServerbmax.zip


JA2(Posted 2009) [#164]
Logbomb, jiffy, I'm quitting blitz. You have the fag ja2 to thank for that. So I will never be here again. I'm sorry. I wanted to help. But I have no choice.

Goodbye forever... :(

I would have thought you might be respectful enough to leave your whining out of this particular thread...

Oh well, bye bye. Send us a post card ;o)


Leon Drake(Posted 2009) [#165]
I got a linux build working on ubuntu but it just absolutely hates CentOS


LogBomb(Posted 2009) [#166]
A server that can be hosted on Linux is certainly useful (especially when looking at the cost of hosting). Leon would you be willing to update your bmax version inline with the development updates for the b3d/b+ version of the server? I can't say that I know what exactly is involved as I didn't purchase bmax.

Jiffy has stated that he is working on a b3d version of the server (are you using blitzui for that Jiffy?) which I think is a good idea because it keeps everything b3d, but a parallel version in BMax certainly would have it's advantages.

I think it is a good idea to keep an Ideal project file for the client, as it gives those who want to use it the tool to keep track of the project more effectively, but certainly other IDEs can be used. It only becomes a problem if certain things are re-arranged.

I look forward to that b3d version of the server. What user lib are you using?

Logbomb


Leon Drake(Posted 2009) [#167]
no problem,

you can obtain a current version of the bmax Servant Server here.

http://www.endsoflegend.com/ServantServerbmax.zip

and here is a compiled linux version seems to only run under ubuntu

http://www.endsoflegend.com/ServantServerbmax.tar.gz

The bmax version requires the vertex.Bnetex module to run the UDP portion of it.


LogBomb(Posted 2009) [#168]
Excellent, thx Leon ;)

Logbomb


Leon Drake(Posted 2009) [#169]
i have a commandline version of the server as well in case you wanted to run the server via SSH over linux


Kev(Posted 2009) [#170]
this is a nice project and i wish you guys working on it all the best. its a shame some parts of this thread turned out the way it did, is this guy for real, ive never seen someone react to help in such mannor.


LogBomb(Posted 2009) [#171]
Thanks Kev ;)

Can I ask people just to ignore various comments and not to comment on them yourselves. Thankyou.

Logbomb


Leon Drake(Posted 2009) [#172]
what comments i have no idea what your talking about..


Jiffy(Posted 2009) [#173]
Just emailed BlitzUI version of the Server with updates & special bonus glitches (learning BlitzUI).


Jiffy(Posted 2009) [#174]
Also, Leon- Your interest and aid in this project I'm sure is appreciated. I don't know that you'll be wanting to maintain a second build in BlitzMax throughout the project lifetime- but if there is any way to make it easy- let me know.
I think the heart of this project is to use Blitz3d and make this type of 'insurmountable' task 'accessable'- that said- the superior performance of BlitzMax can't be denied- but it would be an added expense to users to maintain two languages (hence the recoding the B+ servercode). So- let me know what (if anything) would help. One way or another- there are going to be a lot of changes.


Leon Drake(Posted 2009) [#175]
it's actually not that hard to convert b3d code to blitzmax, i dare not use bmax's built in import bb project as that just makes it even harder.

vertex's udp module almost perfectly mimicks what was used in the servant server so really the only hurdle is converting the syntax which doesn't take much effort.


LogBomb(Posted 2009) [#176]
I have had some time to look at the b3d version of the server, thanks Jiffy. It appears to be working well!

I fixed a bug with creating a new player on the new server, which I have emailed you about Jiffy.

This version isn't released yet.


Logbomb


Jiffy(Posted 2010) [#177]
Just a quick update- I'm doing some organization, planning & file structures. Trying to keep this as simple as possible, but still be expandable is a pita.

Also testing different GUIs- BlitzUI has an unintuitive synax, and a few limitations I'm not so keen on- but a lack of proper skin-ability is probably gonna bug me even though it's not an 'important' feature.

Anyway- next update'll be a while.


Guy Fawkes(Posted 2010) [#178]
When are u guys gonna release the next version of this? I cannot WAIT to try it!


Jiffy(Posted 2010) [#179]
The b3d modified server has a duplicate message glitch I wanna find (cause I introduced it) and a listupdate prob. Also the lib organization is still getting sorted out. Bear in mind everything that's happening so far is internal- it looks like it runs same as it always did (except the server now looks like BlitzUI and has a few glitches)- so technically this version is more broken, though it's easier to read and getting better.


Guy Fawkes(Posted 2010) [#180]
When will one of you guys release the B3D version of this? I would like to help after January


Jiffy(Posted 2010) [#181]
Well, an update:

I honestly haven't had as much time to devote to the project as I would like to date- Real Life priorities intruding- you know how it is.

The major problem has been sorting out the old code & planning the way the new code should worked out. I'm really trying to keep it simple, and that makes it tougher than just doing whatever I want. I do have a fair idea of what I think will work, so I'm pretty sure it won't be too much longer to see 'something'

I now have SourceForge Access thanks to Logbomb (have for a while actually), and am currently trying to sort out the weather & mob servers, untangle the old zone system, and integrate the particle system- not in that order.

If I get overworked or bored I'll probably re-do some of the model textures.

Until then, this is an open source project, so feel free to help out.
Also, if there are other open source blitz components that could be helpful to this one- let me know.

Especially useful would be free media- PD only unless some other license allows re-use by end users (that'll be you guys).

Till later...


Guy Fawkes(Posted 2010) [#182]
well, could u email me the project u have when its compilable? i would like to help, but what good is it if i work on the old version if ur just gonna make a new version and my code obsolete?


Jiffy(Posted 2010) [#183]
Gonna push to have something soon. Currently made a lot of changes, so I have to test stability & such. Don't want mistakes built on either.


Guy Fawkes(Posted 2010) [#184]
well how long will it take before u find out it is stable?


LogBomb(Posted 2010) [#185]
Sounds good Jiffy ;)

Patience Rez, this is a different phase in the development cycle. Previously, changes that were made were simply patching up what was already there to get the engine in a semi-functional state. What is happening now is a good hard look at the engine, with re-arrangement, re-structuring and re-working of certain things, to move the engine forward. This is going to take some time, and progress is going to seem slow for a while, but it is necessary in order for the project to succeed in the long term.

Logbomb


Ross C(Posted 2010) [#186]
I take it any changes made to the project are thoroughly tested? Not meaning to sound rude, it's just you don't want just anyone making changes to the code, and you end up with either, 20 different versions, or a version that doesn't work, because the person changing the code, doesn't understand it.

Oh and, good work with this btw :)


LogBomb(Posted 2010) [#187]
That certainly can be a problem with a community project, and any changes made to the main version are closely monitored and tested.

We are playing a bit of a waiting game at the moment, as Jiffy has a good hard look through the code and makes some structural changes (well Jiffy isn't waiting lol).

I have also encouraged project forks, as it can be difficult to co-ordinate multiple coders and their views of how things should be done in a community project.

At the moment, there doesn't seem to be anyone besides Jiffy and myself, who are interested in getting a decent handle on the code base, so it is easy to monitor changes.

Do I detect a note of interest Ross?


Ross C(Posted 2010) [#188]
I would like help, however, networking is probably one of my weaker areas of coding . Is there a to-do list? Maybe i can work on something else?


Ross C(Posted 2010) [#189]
I would be interested in the world editor part though. i have a partial editor which allows for the placing and linking of waypoints. it shouldnt be too hard to expand that to placing /transforming entities.


Jiffy(Posted 2010) [#190]
Rez:
A while, chill. ;P

Ross C
Well, one one of the things that's taking me long as it has is sketching out how I want components to be broken up for coding, yet still integrate as a whole project. I'm pretty close I think- just got the actual character/behavior/networking/resolution (intangible) dynamics to work out. The, um- tough stuff. :) I do actually have a solve- I just want to go over it a few different ways before I go on my 'mad coding spree' & bump into something unresolvable.

My major prob is deciding how 'little' to do- trim to the essentials, yet support & not 'code out' possibilities. I'd like for the core to be solid & flexible enough that forks be primarily stylistic, or 'upgrade sets'. This is a huge undertaking- and though diff people will want different things & want to go different ways, I'd like for the focus to be on a 'working unified whole' before forks divide up 'completion potential'.

Of course- any help is appreciated in any case.

Obviously there's only so much I can do, but I think when you see the code, you'll see what I'm talking about.

A lot of the zoning, mapping, and such is very 'impromptu', so I have to come up with something that'll be solid, last & hopefully not require to many changes to the generously donated world-editor code (Total Terrain).

Anyway- back to coding!


LogBomb(Posted 2010) [#191]
@ Ross C

We could definitely use some assistance with the world editor code ;) I would suggest at this point, starting to familiarize yourself with the code in the world editor, but holding off any serious coding until Jiffy get's this next version out, so we know more about what needs to be done.

Just to clarify, the current world editor was created by Ckob, but was quite broken, and I managed to get most of the existing features working. Total Terrain on the other hand, is a terrain editor that was donated to the project, and is there as an option for terrain creation.

Logbomb


Ross C(Posted 2010) [#192]
ok no problem . i'll keep an eye on this thread :o)


Jiffy(Posted 2010) [#193]
I decided to start updating the changelog, so this covers the last (unpublished) update & some of this approaching update. All these pieces build together, so I'm working with the client & world builder now.

(this update breaks all previous versions)

Changed includes & library directory structure
Moved all subroutines in accordance to directory structure
Made some code blocks into functions for clarity
Changed media directory structure
Moved all compatible media to new directory structure
Modified Server to use BBGui, and compile under Blitz3d
(minor errors still to clean up)
Found old Models and code from previous releases
Examined Models for needed textures and made 'complete'
Cleaned up lots of various routines for all sorts of functions
- Splash pages
- Cubic Env Maps (water)
- other stuff I don't remember
Currently
(de-'static'izing map structure (make map files placement 'independent' of folder hierarchy))
(cleaning up weather server for possible integration)
(cleaning up animal server for possible integration)
(cleaning up particle engine for definite integration)
(sorting out untracked global vars (many functions pass no params, but use vars))
Changed World Tools & realm folders structure.
(sorting out world builder functions)
(began preliminary ccDB testing)
Photo-shopped out 'Binary People' references from images.
- more other stuff I don't remember.

Patience.


LogBomb(Posted 2010) [#194]
Will I recognize anything?(lol) Don't worry, I certainly understand that work was required on the structure of the code base ;)

So you have begun working with ccDB, very interesting. For those who are interested in finding out more about ccDB here is a link:

http://www.blitzbasic.com/Community/posts.php?topic=86503

Have you decided to go with BBGUI over BlitzUI for everything? I have never used it before, but I am assuming it has certain advantages.

Did you managed to get the water functioning, or is work there still required?

Sounds great, and I look forward to the update, but don't rush it, be thorough :D

Logbomb


Jiffy(Posted 2010) [#195]
Well, whether or not I use ccDB, some level of 'non-wait' fileIO coding technique is necessary, so planning now is better than later.

Oops! I meant BlitzUI, though I was seriously looking at BBGui. I reviewed like 40 GUIs over the weekend. I'm not writing one from scratch, though that's what's really needed- but BBGui is the most versatile of the lot (very few did textfields & got the insta-chuck- apparently GUIs are mostly about pretty buttons & skin-able windows), though the default skins in BBGUI are pretty 'demo-y'. I already started modifying handling the BlitzUI 'almost proper- but not really' textfield function in the update you have, so I might not need to change, even if I want to. In any case, it mostly works- so I'm not gonna mess with it... yet.

Also checked out the Total Terrain Base a bit, though that's getting a head of where I'm at. Very nice donation- Thank you Robin King!

The cubic env mapped water? I dunno. He left out one of the transforms for some reason & I lopped it in then moved on. I think I fixed it early on. I'll have to check. :)

I'm kinda randomly fixing & breaking things as I go along sorting stuff. The big problem right now is all the scene rendering- making it less 'blitz code makes scene' or 'map format hierarchy can't move' & more scene editor and folder/update friendly.


LogBomb(Posted 2010) [#196]
Well, whether or not I use ccDB, some level of 'non-wait' fileIO coding technique is necessary, so planning now is better than later.


The way it works currently, when a user is created, the server creates a file with the same name as the user. In this file, the user's information is stored. When the user logs out, it saves the latest information to the file.


Just a thought on this, it may be possible to use fastpointer and use a separate thread to take care of reading and writing to the character files. I am looking into it at the moment. It would be nice to keep using the existing file system, and simply add more data to the files as different features are implemented. So thread use could be an option, to over come the IO stopage. At this stage it is just a passing thought, I haven't looked into it properly yet.

Logbomb


Jiffy(Posted 2010) [#197]
I don't remember what the default is on 'number of files open' in any particular version of windows- but this technique will eventually test it, and ignore any other apps on a person's machine that might ramp it up too. For some stuff- performance-wise it'd probably be good. But it'd have to be played with. Options are good.


LogBomb(Posted 2010) [#198]
Currently it reads the file on log in, then closes the file, then when the player logs out it opens the file and then writes to it, then closes it again. These are the only 2 instances where the file is opened and used (apart from when it is first created), so I don't think there would be any issues with the total number of files open at any one time and the windows limit.

Logbomb


Leon Drake(Posted 2010) [#199]
perhaps it would be better to make this database driven instead.


Jiffy(Posted 2010) [#200]
That's what ccDB is for.


Leon Drake(Posted 2010) [#201]
oh.. lol i didnt know what ccDB was. does that support mySQL?


Jiffy(Posted 2010) [#202]
SQLite. Details above, from author- post #130


Mahan(Posted 2010) [#203]
@Leon Drake

oh.. lol i didnt know what ccDB was. does that support mySQL?



Yep, through ODBC. MySQL is tested to work.


SQLite. Details above, from author- post #130



Yep, it also supports SQLite native through statically linked lib.

When opening DB you specify (by sending in a const) what DB support you want.

The DB-API of ccDB is identical for both ODBC and SQLite, and thus there is a possibility to easily change between them in an application by just changing configuration.

(Note that for this to work you have to write standard SQL92 or provide alternate SQL variants for each query if you have to use DB-specific functionality in your queries. This of course has to do with the DBs and not with ccDB though.)

It is pretty neat though because SQLite often is good enough for development purposes and then MySQL can be used on the real server.

This way not all developers in a project like this have to have MySQL correctly installed and configured but they can simply have a SQLite-db-file in the folder and run from that while developing and testing.

edit: just added some emphasis to highlight the important parts :)

edit2: Just wanted to add that I'll be happy to support ccDB for this project in case you run into problems or need new features (within reasonable limits :-)

edit3: Is PostgreSQL support interesting? You might have noticed that the future of MySQL have been a bit debated lately because of Oracle acquiring Sun (current owner of MySQL).


LogBomb(Posted 2010) [#204]
This way not all developers in a project like this have to have MySQL correctly installed and configured but they can simply have a SQLite-db-file in the folder and run from that while developing and testing.


That does sound good, I like the simplicity of a file based system, without having to set up MySQL, so using SQLite's db-file could be an agreeable solution.

Just wanted to add that I'll be happy to support ccDB for this project in case you run into problems or need new features (within reasonable limits :-)


That would be excellent and much appreciated.

Logbomb


Panno(Posted 2010) [#205]
just for me is this working i download the 909 run the test.bb and it says always the game is full


LogBomb(Posted 2010) [#206]
Hi Panno,

Version 0909 is the last released version and it is working.

Make sure you are running the server first(TSserver folder, mainserver.exe) and then run the client (Engine folder, test.exe or compiled test.bb)

Logbomb


Jiffy(Posted 2010) [#207]
Hey all,
Just a quick update.
I've been banging at this thing for a while & I've got prob another week of organizing (at least) before the includes are sorted & cleaned up. They're all in 2 dirs now, mostly categorized by function. I also broke the client in some way where it exits quietly rather than reporting an error. Yeah, special. Still trying to find all the bits of code 'entrenched' in some of the includes, and get the call sequence back to original.
I'd also like to rename everything for better transparency & conformity to a coding standard, but that's more time & crap- though I'd hate to yank the rug out from under ya later. (Sigh)
Maybe I need to write tools after this- a proper IDE being amoung them.


Jiffy(Posted 2010) [#208]
Also, I planned on exclusively using the SQLite implementation, and didn't mean to sound like I was 'selling short' Mahan's lib.


Mahan(Posted 2010) [#209]

[...] didn't mean to sound like I was 'selling short' Mahan's lib.



No, worries :)

I just wanted ppl to know what options where available, that's all.


LogBomb(Posted 2010) [#210]
It is great to hear that you are making progress Jiffy ;)

I'd also like to rename everything for better transparency & conformity to a coding standard, but that's more time & crap- though I'd hate to yank the rug out from under ya later. (Sigh)
Maybe I need to write tools after this- a proper IDE being among them.


Just be a little careful of project blow-out. I think re-naming everything and writing an IDE is expanding the project a bit too far.

Logbomb


Jiffy(Posted 2010) [#211]
Re-naming everything does fall into 'the good maintenance of a coding standard'. I don't think it's really avoidable- The routines from the different apps (server, client, editor) already have a few with similar names & similar functions that I can't avoid sorting out. Plus a bunch of functions- that if not clarified could do various things- 'Guess you'll just have to know exactly which one'. Let's really make sure there's a nice 'Learning curve' then, shall we? You mentioned before what this program 'currently' does- which is far from what it'll hopefully, eventually do. This project has to grow- to do that it needs room and gentle coaxing- but I do have a big stick, just in case. Tripping over it's own 'big, unmatched feet' is not going to make it easy for it to 'learn to walk'- but I can manage an axe in a pinch...

But whacking and chopping can only get me so good results. Better
tools for a better job- but this should at least be presentable to the public- so other kids want to play with it.

But some of that can wait. I did mention 'after' for tools, didn't I?


LogBomb(Posted 2010) [#212]
Ok Sure, I can understand that some re-naming will need to take place, but let's keep it to what is necessary.

I interpreted your use of the word 'after' as meaning after you have finished the re-organization and re-naming, that you were thinking of writing an IDE, because of the short comings of the standard IDE and IDEal. To me this seems like a fairly major task, that would be beneficial, but can be avoided.

I sorted something out today concerning the Ideal project file and your re-organization. There is no incompatibility, it is just a matter of setting it up properly (I am kicking myself over this one, lol)

You wrote concerning IDEal:

for example, all files should be in a subfolder from the main folder, not in a higher folder- which I do because of shared libraries.


This didn't actually turn out to be a problem. If you create a new IDEal project file, then set the project folder as the highest folder in the project, you can then set the main file for the project from a lower folder. Once the project file is set up like this, you can have files from a higher folder than the main file as part of the project. I think the confusion occurred because I had already set the project folder in the existing project file, and once you had changed the folder structure, it required a new project file to be created with a higher working directory. The working directory/main project folder, get's set when you create the project file. (something that I should have realized immediately, since I was the one that set the project file up) Fortunately, though, the re-organized version hasn't been released yet, and it can easily be sorted out.

So, I think in the light of all this, that we should stick with using IDEal as an alternative to the standard IDE (of course people can still just use the standard IDE if they wish, or both) and this will effectively save time, compared with creating a new IDE.

I know we have had a few discussions Jiffy, over certain issues concerning the project, and we don't always see eye to eye, but I think that is just normal, and part of thrashing out the direction of the project and what needs to be done. At the end of the day, I am extremely appreciative that you have come on board and are contributing the way you have been, and I just want to make sure there is no confusion on that issue ;)

Logbomb


Jiffy(Posted 2010) [#213]
Fair enough. I thought I emailed you about the folder thing a while ago? Anyway- just an 'fyi'- Ideal doesn't pass useful debug information pretty frequently. I jump between it & the standard IDE often for this reason alone.
As far as 'neccesary' renaming goes- a lot of this project is written like it's a project, not a library in itself. A slew of variable names are global and very common, and very few routines even pass parameters.
Not wanting 'bad' in the future is making 'good' now.


LogBomb(Posted 2010) [#214]
No problems Jiffy ;)

Logbomb


Jiffy(Posted 2010) [#215]
This update basicly explains why, in upgrading the particle system, I've either accelerated an already existing memory leak, or introduced a new one. I'm pretty sure I know how to fix it, but I think instead I'll either cobble in the PD version of the Lotus Particle System, or Ignition. Right now I'm leaning slightly toward Ignition, but I'm still looking over other candidates.

The reason why I have to do this is because of the need for scene management, including particle placement- which would be... messy with the old setup.

I also have some weird memory error on my machine which makes graphics stutter after some programs/streaming videos are started. I'd diagnose it, but I'm overdue for a clean install anyway, so it's just a matter of tidying up before the wipe. I've been putting this off for a few months now.

Anyway. Maybe a release of some sort this weekend. I'm hoping. No promises.


LogBomb(Posted 2010) [#216]
Have you considered Rottparticle?


Jiffy(Posted 2010) [#217]
Not really. The version I have has no examples- so it's pretty untestable without work. It doesn't seem to use instancing, and I can't tell if it's single surface for sure, though I think it is (at a glance).

It also has no explicit license (in the version I have anyway), which leaves the assumption of copyright withheld.

Loading and saving emitter configs is pretty cool, though.


LogBomb(Posted 2010) [#218]
True there is a lack of examples, but it has documentation, is easy to use, and it is extremely fast.

As far as the license goes, it is as free as it gets (Rottbott jokingly states that it is freer than Lotus, in another post on the blitz forum).

The last release version can still be downloaded from:

http://www.rottbott-studios.com/rottparticles.html

Loading and saving emitter configs is pretty cool, though.


Very true, so users can create their own particle effects without coding (using the particle menu in the world editor).

My vote would be for Rottparticle, although I have heard that Lotus is very good too, which could very well be an option ;)

Logbomb


Jiffy(Posted 2010) [#219]
Yeah, found that post

http://www.blitzbasic.com/Community/posts.php?topic=41118

Free (cost) is good, but free to redistribute/resell is another thing. Keeping the original license for the Servant maintainable by making sure the components are all compatible (same/pd) is a pain, but 'c'est la vie'.

Just checked Particleworks- looks good too.


LineOf7s(Posted 2010) [#220]
Surely the next step would be a quick email asking the (licensing) question? rob@...


Jiffy(Posted 2010) [#221]
I think Logbomb knows him, so I'm going to leave him to handle that. Me- I still have about 20 some odd systems to sort/test.


LogBomb(Posted 2010) [#222]
Ok, I will find out for certain from Rottbott.

Logbomb


Jiffy(Posted 2010) [#223]
tyvm.


LogBomb(Posted 2010) [#224]
This was RottBott's reply regarding RottParticle and RottNet:

Hi, both are free, public domain, no license. Anyone can do anything they want with them.


Logbomb


LineOf7s(Posted 2010) [#225]
Aaah, crisis averted. Carry on. :o)


Jiffy(Posted 2010) [#226]
Cool. More recoding... :)


Jiffy(Posted 2010) [#227]
Making progress. Just an update- I am still coding. I'm almost happy with the way the code looks now...


LogBomb(Posted 2010) [#228]
Thx for the progress report Jiffy ;)

Looking forward to getting my hand on it!


Guy Fawkes(Posted 2010) [#229]
good job, jiffy!


Leon Drake(Posted 2010) [#230]
I have the Fastext library. although i'm not sure how i could add that into a community project since the code isn't free......


Jiffy(Posted 2010) [#231]
Yeah- keeping this 0 cost is a must. I thought about using Devils, but the sources for the dlls isn't provided (though it's still a stellar contribution). Ashadow is now free (but can't be redistributed AND doesn't have the dll source provided).

Other options are going OpenGl and using Softpixel (which is so far the best choice)- but that's after the code base is solid- which I'm still working on.


Guy Fawkes(Posted 2012) [#232]
Bringing back the servant thread from the dead! =D


Ginger Tea(Posted 2012) [#233]
Not sure if phrasing is appropriate ...


H&K(Posted 2012) [#234]
I would ban you for that


Guy Fawkes(Posted 2012) [#235]
Wth? Alls i bloody did was revive 1 of the best threads on this entire board.....


Guy Fawkes(Posted 2012) [#236]
I didnt mean to offend anyone... :S Sheesh... I just CANT win -.-


Guy Fawkes(Posted 2012) [#237]
Moderators, please lock this please... I dont want to cause any commotion...


Ginger Tea(Posted 2012) [#238]
thread necromancy isnt the problem itself although it is just a pointless bump thread

its just that "bringing a thread back from the dead" when the thread began meantioning Ckob the coder died


Guy Fawkes(Posted 2012) [#239]
i brought it back FOR him.. i thought it would be a nice gesture if we can help finish what he started :) but fine.. w/e... close the thread... idrc..


H&K(Posted 2012) [#240]
id like to keep this thread open.

it deserves some respect.

i dont care what anyone else thinks

or says.

~DS~


:) but fine.. w/e... close the thread... idrc..



Ginger Tea(Posted 2012) [#241]
Although I am interested in knowing how far along it is, or if it lost momentum in the year between posts.

The phrase no news is good news feels the exact opposite in this case.


Paul "Taiphoz"(Posted 2012) [#242]
in all honesty, its damn good good, and deserves to be in the public eye, if that means necroing the thread then go for it, if your worried about annoying the people who hate to see old threads then just make a fresh one.

In the two or three years or how ever long its been since that was first written I bet there are a lot of new blitz3d coders who never got to see it, and not much if anything has changed with the language in that time so its for sure still relevant.


Ginger Tea(Posted 2012) [#243]
Like I said, I have no beef with bumping this thread, but TBH the phrasiing of keeping it alive, when the thread may not have been started had Ckob not died ...

I actually re read some of this and he phrased his bumps in similar ways "I'm keeping this thread about Ckob's death alive" is how I start to read them.

a simple
Hey guy's it's been a year, how goes it?
would be far better.

And as logbomb's last post was over a year ago, one can't but help thinking that he and jiffy were the only ones to actually do anythng with it (publicly atleast)


Guy Fawkes(Posted 2012) [#244]
I only wanted to see how the project was going... NOT keeping ckobs death alive... -.- Whoever thought that about this, is SICK -.-


Ian Thompson(Posted 2012) [#245]
I don't think this is fair, Rez obviously did not mean what some people took from his post. Give the guy a break FFS.


Yasha(Posted 2012) [#246]
If you want a thread to stay at the top of the topic list, email the mods and ask very nicely for them to stickify it (and preferably to also delete the last dozen or so posts while they're here).

Bumping is annoying. Don't post just to bump. Post to contribute usefully to the discussion and/or project. If you aren't going to do any of those things, grab your offline copy for backup and assume people will find what they need through the search feature (which is how they're supposed to find things).


Guy Fawkes(Posted 2012) [#247]
Woh woh woh... Hey, hey.... I didnt ask for a fight.. Alls I wanted to do was see how the project was doing.... :/


Paul "Taiphoz"(Posted 2012) [#248]
I would like to second, making a new thread with all the relevant info and then ask the admins for a sticky, it's a very valuable bit of code, and making a new thread minus the ckob info will prevent the stuff above by making the thread about the code and not his very sad passing.

So, Rez, make a new thread m8 with all the important info, then mail the admins for a sticky.

it gets my vote at least.


Jiffy(Posted 2012) [#249]
Sorry I've been away so long- I've gone through a few changes. I'm 2000 miles away from where I was, and have changed jobs twice (when able :)- in short, I've been 'otherwise engaged'. That's the short version.

I'm now mostly set up again, and though still lacking in free time will make an effort to get the last update cleaned up and out. I'm sure I don't remember where exactly I left off, but it shouldn't take me too long to figure it out & patch it up.

Did my last update ever get posted?


Guy Fawkes(Posted 2012) [#250]
U jerks all jump on me and start yelling at ME for this thread, yet jiffy posts, and doesnt get repremanded at all.. yea.. THANKS guys -.-


Yasha(Posted 2012) [#251]
Rezros, for the love of Ritchie would you please just shut the f**k up and f**k off away from this thread forever? Damnit why are we not allowed to swear here?!?!

Jiffy has been respectful, professional, actively maintaining and contributing to this project and working on it.

You're hanging around like a godsdamned vulture waiting for some code to steal and making an incredible nuisance of yourself. All you have done in this thread is insult people, derail the discussion, and probably demoralise the people who have actually been working on it. Why the hell do you expect equal treatment to someone who's been working and generously sharing when you have done neither, instead actively being a selfish burden on everyone?

And more importantly stop coming back, you moron. What the hell did post #250 contribute? Oh right, nothing. Nobody's even mentioned you in weeks! If you stopped reading a conversation in which it's clear you aren't welcome, everyone wins!

Seriously. Piss. Off.


Ginger Tea(Posted 2012) [#252]
erm jiffy is giving a status update, you just did a pointless "bump" with IMO, poor choice of phrasing.

and 17 hours ago I was asleep and untill an hour ago at work so would not have seen post.
This is a 24 hour planet and when its day for you it might be night for me.


Guy Fawkes(Posted 2012) [#253]
Mods. Would u plz ban Yasha? Ive been banned before for cussing. He gets the SAME treatment.

Last edited 2012


Leon Drake(Posted 2012) [#254]
Hey Jiffy i still have the blitzmax converted server if you want i can send you the code or post the exe+source here.




Last edited 2012


GfK(Posted 2012) [#255]
Oh dear me.


Ross C(Posted 2012) [#256]
Is this project still needing a world editor coded?


Leon Drake(Posted 2012) [#257]
i think it already had some sort of rudimentary world editor that comes with it. Which definitely needs a revamp.


Ross C(Posted 2012) [#258]
Cool, I wouldn't mind taking a look see. I'm currently farting about with one just now.


Leon Drake(Posted 2012) [#259]
cool, i think adding blitzsky and blitz tiles would really make a large improvement on this engine, especially if it is integrated into the editor.

BlitzSky
http://blitzbasic.com/Community/posts.php?topic=87026#986315

BlitzTiles
http://blitzbasic.com/Community/posts.php?topic=84809#1119712

Last edited 2012


Ross C(Posted 2012) [#260]
Downloading the source file now. Sounds like a good idea!


Jiffy(Posted 2012) [#261]
Things have taken quite a while because of four issues;

1. Extensive re-coding of the old stuff. I didn't like some of what I was 'settling with' before, and have been 'having at it'.
2. Media integration. I have gotten free content from a few sources and have been working on making it easy to use/swap out bits. This is not going well as I'd like, but at the least you can expect some better scenes in the future.
3. 'The next step' (even more, 'unnecessary' re-coding). Not going to get into detail at this point, but I'd really like this project to not follow the path of it's parent language. Checking other options, trying to keep options open... I should mention at this time that I will probably fork this project- one to stay Blitz 3d I suppose with it's core features and modules, and another to go elsewhere and have more options. This 'base+mods+extras' idea may not work, but I'll give it a go. I'm not working on the extras now, just trying to make the base, 'mods & extras' friendly.
4. Time. Sorry- I just don't have as much of it 'free' as I'd like- but I will keep plugging on!

Next time I post an update I should have some pictures. Maybe (unlikely) some code!

Ross C:
As has been mentioned there is a world editor in there- BUT in game editing would be great, and the out of game editor needs some touches anyway.

Leon Drake:
Yeah, that would be good- but would be better would be if you (or someone) else maintained that version. I have looked at Blitz Tiles & Blitz Sky & have to give them more attention later. I already have a few surprises I planned, and now I get to compare/contrast/etc.

Later all!


Leon Drake(Posted 2012) [#262]
Got the servant engine converted to Bmax last night completely. Was able to run the client and server. only had some issues with terrain collisions. But i think that's just a bug in the Xors3d trial.

Anyways i replaced the 3d engine with Xors3d
Replaced the UI with Albalynx
Replaced the Networking Lib with Vertex.bnet mod and recoded the Blitzplay code to accomodate it.

Got some of the world editor converted over. Probably going to revamp this to use sqlite for storing world data.

Got some work ahead of me but the conversion part is more or less done. Just have to think which direction i want to take the engine.

As much of a world of warcraft fan i am i think that style of gameplay is just too cliche. I'm a big fan of PSO (Phantasy Star Online) It was the MMORPG that started it all for me and i really enjoyed the gameplay. I know PSO2 will be out soon and *drools* probably be on that a lot. But i think in all honesty i'd like to bring the Bmax version of the Servant Engine to that gameplay style.

Also i really love blitzsky and blitztiles.. i wonder if it would be too vexing to convert those to Xors3d



Last edited 2012

Last edited 2012


Leon Drake(Posted 2012) [#263]
Gotta say those xors3d gizmos make this much easier to use.




GaryV(Posted 2012) [#264]
I thought Xors3d was dead?


Leon Drake(Posted 2012) [#265]
seriously? i know flow3d died..



xors3d website seems lively so thats why i used it

Last edited 2012

Last edited 2012


feeble1(Posted 2012) [#266]
Nice look for the GUI. Have you changed the way the server handles the player's position messages? It seems that x y z and whatever, are transmitted to all players whether or not they are in the same zone. It makes sense that everyone sees chat messages though.


Leon Drake(Posted 2012) [#267]
mostly just got it converted, redoing the zone editor at the moment. But if what GaryV says is true i may need to switch engines. I know xors3d is more or less a viable option but if it's halted with no possibility of updates or becoming open source i'd rather swap it out with irrlicht.


feeble1(Posted 2012) [#268]
Sounds like you're planning some pretty big changes to the source. I played around with your converted server code long ago. It was a nice learning experience to pick it apart and get it working. I'll be interested to see what you make of it.


Leon Drake(Posted 2012) [#269]
Decided to use maxml to save the zone data and use sqlite for asset managment and whatnot.

Oh jesus how did i get here? my my this seems familiar..



Last edited 2012


Leon Drake(Posted 2012) [#270]
I'll post future updates here

http://code.google.com/p/servantx/


Guy Fawkes(Posted 2012) [#271]
You ripped that level from PSO! :<


Leon Drake(Posted 2012) [#272]
LOL ya i did. I miss running around the city *cries* anyways i was planning on making servant run similar to PSO. But i'm not gonna use the original content ( i wish haha )

But i have some stuff i've been working on that looks similar.


Guy Fawkes(Posted 2012) [#273]
OMG! PLEASE let me know when you update it! :) Also, I'll contact you via email privately, since SOME ppl (not naming names), like to make fun of me, or cant control their comments. :)


Leon Drake(Posted 2012) [#274]
Sure thing


Chroma(Posted 2013) [#275]
Leon...how's this coming along?


Leon Drake(Posted 2013) [#276]
not much since i had to do some jail time for something stupid. anyways i am back now so lol i can get farther into it.

the UI is complete shit in bmax, somewhere the coordinates do not translate well at all so i'm going to have to swap it all out with albalynx. Also i cannot get terrain collisions to work for the life of me. not sure its a bug in the trial of xors3d or what but for the time being i have to do all my testing in static mesh areas.


GaryV(Posted 2013) [#277]
not sure its a bug in the trial of xors3d


If it is, it will not be fixed since it is a dead product that is no longer supported or updated.


Guy Fawkes(Posted 2013) [#278]
It works perfectly fine for me.


Leon Drake(Posted 2013) [#279]
for some reason the guy just falls through the terrain. i went over the code multiple times, couldn't find the problem.

i may just do a separate test program by dropping a block on the terrain and see if the problem persists.


Guy Fawkes(Posted 2013) [#280]
Hey Leon, can you upload the files? The ones with the PSO level? I liked PSO, and I would like to try it. :) Thank You!


Ginger Tea(Posted 2013) [#281]
I would advise against uploading Sony's property, the mesh data might be Leon's work, but I personally would not risk getting back into trouble posting the assets not so long after getting out of klink, hell even without the 'leave of absence' it's still not a good idea.

Safest option would be a textureless level for the running around, but without the PSO gfx it's kinda pointless I guess.


Leon Drake(Posted 2013) [#282]
yea i was only using it to test some movement controls with ground and walls i can actually collide with. I just happened to have the mesh data for most PSO levels from a clone i started a while back here http://ipso.vigilsoft.net/ using unity but after some update it completely borked all the networking code i wrote and i had too much of a headache trying to find the problems that i had not got back to it.

screeny of the clone




Guy Fawkes(Posted 2013) [#283]
Well can you release a version with just a test level then?