Jump to content

roBrowser - Ragnarök Online in Browser


KeyWorld

Recommended Posts


  • Group:  Members
  • Topic Count:  87
  • Topics Per Day:  0.02
  • Content Count:  1335
  • Reputation:   932
  • Joined:  10/26/11
  • Last Seen:  

Love it :3 I'm allways excited to see all the news about this awesome project you have

  • Upvote 2
Link to comment
Share on other sites

  • 3 weeks later...

  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

I just add the network core in roBrowser.

I search a way to make it organized and user-friendly to use.

So basically, all packets are converted from http://rathena.org/wiki/index.php?title=Packets using tools/packet-builder/.

Example to parse:

Network.bindPacket( 0x69, PACKET.AC.ACCEPT_LOGIN, function(data){
    // data.AuthCode, data.AID, data.userLevel, data.ServerList, ...
    // do whatever you want with "data"
});
Example to send:
var pkt = new PACKET.CA.LOGIN();
pkt.ID = "Test";
pkt.Passwd = "Test";
pkt.Version = 20;
Network.sendPacket(pkt);
If you have a better idea, let's talk about it :)

There will be three differents ways to connect to server:

  • Using JAVA.
  • Using Chrome Socket API.
  • Using WebSocket to connect to a Proxy server.
For moment I am focus on JAVA.
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

He he, I found that packet list handy for generating definitions too. :)

 

Only difference from your approach is that I just pass objects and later fetch a builder based on packet ID. The idea was doing something like this:

send({
    PacketType: version > xxx ? 0x1dd : 0x64, /* CA_LOGIN2/CA_LOGIN */
    Version: version,
    ID: user,
    Passwd: passwd,
    PasswdMD5: md5(passwd)
   clienttype: clienttype
})

But I guess the lack of proper grouping and having to switch values based on packet version kinda defeats the purpose. I though you were done with the network though. Reimplementing everything?

 

Also stumbled upon your js1k submission while checking the latest entries. Pretty cool!

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

Yeah I rewrote the whole core as I said before. The old one wasn't really well optimized and organized, and pretty hard to update, now it's much better and user-friendly :D

About your way to do, it missing some structure at my point of view and will be maybe hard to maintain in future (and it seems you generate the password hash even if not used), but yeah it's fun the way you did it, to merge packet and just define the header to build the correct one.

Hmm maybe I will remove the packet_id from the Network.bindPacket() and move it to the packet structure instead, I don't think we have to care about it at this step...

About js1k yeah it was fun to do lol but very hard to compact to 1024bytes, but I'm really satisfied about the result.

Nice to see you here curiosity :)

What about your project ?

@Project

Now support 0x200 GRF version with DES encryption.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  133
  • Reputation:   189
  • Joined:  05/20/12
  • Last Seen:  

About js1k yeah it was fun to do lol but very hard to compact to 1024bytes, but I'm really satisfied about the result.

Nice to see you here curiosity :)

What about your project ?

 

Ah, not so good. I hope you will finish your project soon so I don't have to have to finish mine. :P

 

I have too much work at university these days to do spend any time on private projects. Also I get easily distracted. The last thing I've done was to create a command-line based GRF reader for the purpose of hashing and categorizing all the files from all the patches into a database. Yes, I'm aware of how insane that sounds. I'm hoping to use it to easily generate small GRFs with just the files I want. At the very least it'll make a cool version history of all of Gravity's files. Working out the old Westpak/GRF 0x12 format from the alpha days was interesting :)

 

Although I spent a few hours and managed to submit a JS1K entry myself. It's called "Tree Ninja" and is one of the latest entries. Check it out if you have time!

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

It will be released this year even if it's not totally finished, it will be a good thing to open the source :)

Same here, I try to do my best to work on this project but sometimes it's hard to manage it and all others things (like my girlfriend lol).

It can be a good thing to have a GRF history/diff/tracking tool to see what Gravity add/remove/change in its files, keep it up ! (I know some others guys had the same idea :P)

Nice js1k entry, I asked myself "why 'ninja' ?" the first time I saw it, nice done :)

@project,

No news, have problems with one of my computer, so I will try all I did in "bind mode" (rewrote the whole Entity manager) when I will switch to my girlfriend's home this week end :)

  • Upvote 5
Link to comment
Share on other sites

  • 4 weeks later...

  • Group:  Members
  • Topic Count:  10
  • Topics Per Day:  0.00
  • Content Count:  36
  • Reputation:   0
  • Joined:  01/22/12
  • Last Seen:  

keep up good work sir. You're genius guy seriously!

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

Some news today.

 

Map loading

I really improve my map loading : update the zlib unpacker, optimize the mesh compilation.

It's now about 2-3 times faster than before. It takes ~3 seconds to load a map like Izlude or Prontera, instant loading for little map. Lighthalzen seems to be the slowest to load : ~5 seconds.

I'm quite happy of the result.

Sound objects

I added sound objects to the map, I'm not certain of the volume to use for this objects (Audio API allow a min volume of 0.0 and max volume of 1.0; there are some sound object with a volume of 2.0 so not sure yet what the max volume is here).

You can see the sound visualization of aldebaran (all porings are a sound object):

aldebaran-sound.jpg

 

Lub files

Since Renewal, a big part of servers use lub files to store data info, so it should be normal for robrowser to load this files at runtime to build its DB.

So I wrote a Lub decompiler (PHP, and converted the code to JS), it don't support all opcode but is enough to extract tables (I don't care of extracting functions).

Here the PHP code in action: http://www.robrowser.com/prototype/lub/

For now I'm only able to extract lub version 0x51 but it seems some client use the 0x50 version (why ? :(), so I will have to extend the code later.

 

Sprite Rendering

I re-wrote the whole Entity Manager code, as the old one it support all actions/animations.

I added some setter to update automatically the sprites/act/palettes when modifying/setting a new visual look, ex: you change the sex, it will automaticaly reload all sprites/actions (head, hat, weapon, ...).

Palettes are applying on the pixel shader to avoid having to re-build each sprite image (faster and easier).

I also face the same problem as Shinryo in his topic and used the same way to fix it, but it's definitively not the way to go : collision with roof, weird result when sprite is on the water.

The better way is to project the top vertices to the up vector of the bottom part and modifying UVs to match the new form in the screen, but it's more complicate and I lack knowledge on 3D maths.

 

Weather

I just add sky and clouds to some maps (yuno, gonryun, thana_boss, 5@tower, ...) using a config file in the DB, it's funny how the client manage it. The result looks good:

ra_temsky.jpg

 

 

Other news

  • IE11 will support webgl
  • Web API Device Storage will allow to use local GRF without needed to select it each time at runtime (I hope this standard will be accept...).
  • Firefox added ASM.js in the latest nighty build. It allow to run some js (at this time just arithmetic code) script at 2 times slower than native speed (comparable as Java and C#), by doing some low typage on variables.
  • Upvote 5
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

 

A video to show the cloud/sky feature from the post above, (you can also see how fast is it to load a map compared to the map-viewer video).

  • Upvote 6
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  19
  • Reputation:   2
  • Joined:  12/16/11
  • Last Seen:  

ouh wow, very nice work KeyWorld

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  3
  • Reputation:   0
  • Joined:  11/06/12
  • Last Seen:  

Amazing Project *_*

 

If I were you I would totally sell this to Gravity and make a lot of money. I am sure they are interested ;)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  87
  • Topics Per Day:  0.02
  • Content Count:  1335
  • Reputation:   932
  • Joined:  10/26/11
  • Last Seen:  

Awesome improvements Keyworld! You even did a LUB decompiler already? woah, awesome. I'm quite impressed of that video, I didn't find anything missing from the original RO client in comparisson with yours.

 

I hope your proyect will be complete very soon :D

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  43
  • Topics Per Day:  0.01
  • Content Count:  400
  • Reputation:   5
  • Joined:  12/05/11
  • Last Seen:  

Just awesome. Can't wait for this. /no1

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  22
  • Topics Per Day:  0.00
  • Content Count:  806
  • Reputation:   220
  • Joined:  03/13/12
  • Last Seen:  

  /slur

Need I say more. Hope this project finishes up soon  

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  36
  • Reputation:   5
  • Joined:  02/01/12
  • Last Seen:  

Outstanding... /ene

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  19
  • Topics Per Day:  0.00
  • Content Count:  192
  • Reputation:   43
  • Joined:  12/13/11
  • Last Seen:  

Can't wait to get my hands on.

Is there an open alpha/beta release planned?

 

Link to comment
Share on other sites

  • 3 weeks later...

  • Group:  Members
  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  51
  • Reputation:   19
  • Joined:  04/21/13
  • Last Seen:  

Great project there, and I'm impressed by what you've already done !

Link to comment
Share on other sites

  • 2 months later...

  • Group:  Members
  • Topic Count:  59
  • Topics Per Day:  0.01
  • Content Count:  225
  • Reputation:   5
  • Joined:  05/30/12
  • Last Seen:  

cool :) 



 cant wait to test it ^_^

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  379
  • Reputation:   304
  • Joined:  11/10/11
  • Last Seen:  

A long time since the last post (vacation, home relocation, waiting internet access).

 

A lot of things were changed in the CORE to have a better organized code, I will not talk a lot about it since it's not finished yet, but it's sure now, roBrowser never be so stable.

I will just detail the visual change.

 

 

 

 

Intro Window

 

start.png

 

 

A new button comes: "start", simply to run the tool without needed to send a client file (and so switching to remote GRF).

The idea change too, instead of reading the GRFs, it's now reading the entire client (select all your files and give it to him), so I can select what I want to use (client, data.ini, grfs) and extract informations I need to run the tool.

 

 

 

 

 

Packetver Auto-Detection

 

Now roBrowser should be able to support packets from 2004 to (near)today and send the appropriate packets to the server.

It can detect packetver from two techniques:

  • If you drag drop your client, roBrowser get the packetver from the compiled date of your executable (PE Header).
  • Guessing packetver from the packets received from servers.

I didn't see an error for now since I connected on pservers.

 

 

 

 

 

Configuration File

 

A configuration file appeared in roBrowser, for now there is not much parameters but I will expend it in future. It's currently possible to set the :

  • packetver ( YYYYMMDD / "auto", "client", "server").
  • remote host (default: http://grf.robrowser.com/).
  • grf_list ( default: "data.ini", or json representation).
  • clientinfo file (sclientinfo ? clientinfo ? other ? json representation ?).
  • set specific configs for each servers in clientinfo if using json representation.

 

 

 

 

UI

 

char-select.png

 

 

I modify the chararacters on char-select UI, the selected player is moving (same animation that after the player get hit). I still need to check the window size for the char-select to know if  need to write the mapname or not...

 

 

online.png

 

 

Still in progress, I continue to write UI for the game, it's the most boring part...

I added some checks on map loader, since an old update, if there was an error the loading just stop. So right now, if there is an error with a texture not found, model error, or other, the loading just skip and continue.

 

 

 

 
 

Log System

 

 

log.png

 

I extended the log system to be clean with differents colors for each informations, it's just easier to catch information and errors, all packets (and their structures) are accessibles throw the log and it's possible to know if they have a callback or not.

 

 

 

 

And now ?

 

Currently working on finishing to organize the code, after still a lot to do with all the UI and packets to interract with but the structure is here.

Planning a release on september if I find time before my next vacations.

 

 

 

 

Bonus

 

Do you remember some posts back, I show some screenshots of a GRF Viewer using roBrowser's Core ? Here a video I made some months ago :

 

 

Note: the models are a little slow to load : the reason because of a "no-cache" option that reload all scripts (network connection) each time you try to load a RSM. Without this options, it's instant loading.

 

It will of course be available with roBrowser's source code (I would like to post it in my old GRF Viewer topic, but it's archived and I can't update it...).

  • Upvote 4
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  72
  • Topics Per Day:  0.02
  • Content Count:  2997
  • Reputation:   1130
  • Joined:  05/27/12
  • Last Seen:  

That's just incredible, KeyWorld. You must be pleased with how this is turning out. XD

I've unarchived your topic Web GRF viewer.

Link to comment
Share on other sites

  • 2 weeks later...

  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  355
  • Reputation:   34
  • Joined:  02/09/12
  • Last Seen:  

Wow... Almost.. and how this is going to work? If you have something like.. custom files, this roBrowser will only work with determined servers? Or you can provide us with access or something for adding our clients? I mean.. because the idea is roBrowser, Ragnarok in a Web Browser so.. all the files must be included there for X server, what happens if X server have custom files?

 

 

EDIT: 

 

I see.. so you're going to release the source code so we can implement it to our web hostings? That's amazing..

Edited by M45T3R
Link to comment
Share on other sites

  • 4 weeks later...

  • Group:  Members
  • Topic Count:  112
  • Topics Per Day:  0.03
  • Content Count:  388
  • Reputation:   4
  • Joined:  05/01/12
  • Last Seen:  

but sir can u give the demo for ur project??i hope i can play O_Ob lol

Link to comment
Share on other sites

  • 5 months later...

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  50
  • Reputation:   39
  • Joined:  01/13/12
  • Last Seen:  

I will still try, but congratulations. 

Certainly was a very difficult job. 

You deserve all the thanks.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...