kevinhikaruevans / uojs2

An unfinished web-based client written in Javascript for the game Ultima Online
MIT License
53 stars 28 forks source link

We need to get a package with information about the tile. #45

Open lamo2k123 opened 7 years ago

kevinhikaruevans commented 7 years ago

I'm working on this now. :)

Right now, I have a script that integrates with servuo and it returns map data, tiledata, and art.

kevinhikaruevans commented 7 years ago

@lamo2k123 do you think it is better to get JSON map data & tile data with REST API or through websockets?

Example:

lamo2k123 commented 7 years ago

Websocket

lamo2k123 commented 7 years ago

tile texture gives the server? or server gives texture id?

kevinhikaruevans commented 7 years ago

Both.

Example map request at (1, 1):

[{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5},{"ID":168,"Z":-5}]

Right now, returns the 8x8 block (http://wpdev.sourceforge.net/docs/formats/csharp/maps.html)

Need to clean up response, so it is easier to use and read

lamo2k123 commented 7 years ago

png gives the game server?

kevinhikaruevans commented 7 years ago

Yes... The game server runs the image and data server.

The image/data server runs through ServUO. It can run independently too though.

lamo2k123 commented 7 years ago

I thought that all the static is stored in the client.

kevinhikaruevans commented 7 years ago

It is, but it would make more sense to have a server that can serve images for the game client.

Trying to move the images to the client would add too much complexity and wouldn't be as efficient.

lamo2k123 commented 7 years ago

Hmmm....

kevinhikaruevans commented 7 years ago

Static content is over 1GB, so the client would need to download it every load.

The server can send images as needed... so many smaller requests vs one big request...

lamo2k123 commented 7 years ago

how much more work on this task?

kevinhikaruevans commented 7 years ago

I'll try getting something up tonight after work :)

kevinhikaruevans commented 7 years ago

Here's an example of the map data:

http://107.161.24.129:2590/map?y=500&x=500

I can't get images working. It looks like Mono/libgdiplus doesn't support ARGB1555, which is needed for Ultima.dll to get images. 😞

Right now, everything is written in C#. In the future, I want to use nodejs OR nodejs+node-gyp+libpng or something.

lamo2k123 commented 7 years ago

😞

kevinhikaruevans commented 7 years ago

I'm updating Ultima.dll to use ARGB8888 instead of ARGB1555 later tonight, so we should be able to get images working.

I also need to update it so it returns a 32x32 square instead of a 44x44 rectangle... That way we use a texture in THREE and just map the image directly without the need for rotations. - this probably can't be done...

kevinhikaruevans commented 7 years ago

Loads with ARGB8888 👍

http://107.161.24.129:2590/land?id=4 http://107.161.24.129:2590/land?id=168

kevinhikaruevans commented 7 years ago

@lamo2k123 - should I wait for you to finish the refactoring before starting implementing the graphics?

lamo2k123 commented 7 years ago

Mmm... Use branch 'refactoring'.

lamo2k123 commented 7 years ago

Hmm.. Origin client size textures 64x64 and 128x128. And rotate 0

kevinhikaruevans commented 7 years ago

In 'refactoring', I npm installed history, hook-redux, and react-router-async.

Any other packages needed?

In console:

[HMR] Waiting for update signal from WDS... index.js:111 Object {length: 2, action: "POP", location: Object} core.js:97 action @ 20:12:34.197 @@router/START_TRANSITION (in 0.20 ms) index.js:291 Uncaught (in promise) TypeError: route.action is not a function at Router. (index.js:291) at step (index.js:40) at Object.next (index.js:21) at fulfilled (index.js:12) (anonymous) @ index.js:291 step @ index.js:40 (anonymous) @ index.js:21 fulfilled @ index.js:12 client?8505:38 [WDS] Hot Module Replacement enabled. client?8505:38 [WDS] Warnings while compiling.

lamo2k123 commented 7 years ago

I'll commit today with corrections

kevinhikaruevans commented 7 years ago

Sweet, thank you. :)

kevinhikaruevans commented 7 years ago

Have you used https://www.npmjs.com/package/request before?

I need to grab JSON and wondering if this is good to install or not. Could also just use XMLHttpRequest too.

lamo2k123 commented 7 years ago

Use the 'window.fetch'

lamo2k123 commented 7 years ago

which package contains data on the location of the character on the map?

kevinhikaruevans commented 7 years ago

I think it is either packet 0x1B or packet 0x20:

https://github.com/kevinhikaruevans/uojs2/blob/master/src/client/state/player/actions.js#L34

https://github.com/kevinhikaruevans/uojs2/blob/master/src/client/state/player/actions.js#L54

lamo2k123 commented 7 years ago

http://107.161.24.129:2590/map?y=3503&x=2574 here are the coordinates I got

lamo2k123 commented 7 years ago

there mapId need?

kevinhikaruevans commented 7 years ago

it's using blocks, so you'll need to do 3503/8 = 437, 2574/8 = 321, so you'll get:

http://107.161.24.129:2590/map?y=437&x=321

There is a map ID but I need to implement it still. Right now, it's using Felucca.

kevinhikaruevans commented 7 years ago

We'll probably need to create a system to detect as the player moves, preload each map block when they move near it.

lamo2k123 commented 7 years ago

screen playerg_12-29_00 06 8x8 block small :(((

kevinhikaruevans commented 7 years ago

Yeah, block is too small, so we'll have to load multiple blocks at once.

I'm trying to import THREE: https://github.com/kevinhikaruevans/uojs2/compare/refactoring...refactoring-map-additions

but import * as THREE from 'three' doesn't seem to work. Any ideas? 😕

boberski666 commented 7 years ago

Do you commit the res server for me to hook up on my vps? :)

kevinhikaruevans commented 7 years ago

In ServUO's Scripts directory:

UOJSServer.zip

Then in Data/Assemblies.cfg, I'm including these:

Newtonsoft.Json.dll
websocket-sharp.dll

(you'll need to download the binary dlls)

You might be able to run it as a standalone application (it has a Main function) but you'll need to compile it.

It's just easier to use http://107.161.24.129:2590/ for now, or at least until I can get it as a standalone application in javascript...

lamo2k123 commented 7 years ago

And where you can view the source code for parsing files map.mul

kevinhikaruevans commented 7 years ago

I'm using Ultima.dll to do that.

lamo2k123 commented 7 years ago

can nodejs to try to parse map file and make the api?

kevinhikaruevans commented 7 years ago

Yeah, but it'll take a long time to do.

lamo2k123 commented 7 years ago

I would like to just getting the tiles to rewrite.

kevinhikaruevans commented 7 years ago

It's just a matter of porting over Ultima.dll to nodejs. Should I work on doing that?

https://github.com/ServUO/ServUO/tree/master/Ultima

lamo2k123 commented 7 years ago

I want more convenient and flexible API to obtain data on the surrounding tiles. But we need to understand how to read the map file map (x) .uop

kevinhikaruevans commented 7 years ago

It's being done here: https://github.com/ServUO/ServUO/blob/master/Ultima/TileMatrix.cs#L414

Should I create repo for nodejs port package?

lamo2k123 commented 7 years ago

created. I think it will take much time.

kevinhikaruevans commented 7 years ago

Do you have a link for it?

lamo2k123 commented 7 years ago

I did not create. you create the repository.?

kevinhikaruevans commented 7 years ago

Ooh, just did:

https://github.com/kevinhikaruevans/uodatareader

lamo2k123 commented 7 years ago

nice 👍

kevinhikaruevans commented 7 years ago

Should it use uodatareader in server/index.js and send map responses through the websocket? Then we can send map JSON data and stuff through it.

lamo2k123 commented 7 years ago

of course yes