Git Product home page Git Product logo

eternal-lands's People

Contributors

adamantinus avatar ago1024 avatar bendoughty avatar brunoramoslu avatar danielarkaos avatar doughdemon avatar erdies avatar exzap avatar feeltheburn avatar gamil-zirak avatar geq1t avatar gvissers avatar jiyunomegami avatar kbialowas avatar lukehorvat avatar pjbroad avatar schmurk avatar sir-odie avatar sorlok avatar xaphier avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eternal-lands's Issues

Android port discussion

I did some good progress on the Android port. Not yet playable, but good progress nevertheless.
I would like to have a dev meeting in game, or skype or ICQ to discuss about a few things, such as how to handle the touch based events, and a few other things.
Let me know if you can do that, and when it would be a good time for you.

Please add an option to delete recipes including their slots.

It is only possible to add a recipe or clear a recipe slot at the moment (clearing a recipe slot keeps the empty slot). Since it is possible to accidentally add the same recipe twice, it would be nice if it was possible to delete unwanted ones.
Thank you.

Horse can get misplaced during fast battles

TBH, there's only a rare chance of this happening, but it can happen. I wouldn't consider this a major bug, just a minor glitch.

If fighting on a horse, lots of fast-kill stuff repeatedly, the horse eventually gets stuck in one spot while the player continues to move.

Gets fixed with a map switch.

See video of it here: https://youtu.be/5onQAJZvIcY

At 00:32, he first comes off his horse
At 01:42, I clear the invasion so he stops fighting, but he's still off his horse. He moves around but the horse remains in place.
At 02:30 he heads to KF sans horse, horse disappears when he switches maps, returns riding the horse.

Obviously done on Test server. ;-)

Problems with HD laptop

Hi, I recently bought a laptop with an HD display and nvidia gpu. In the settings I've selected 1920x1080 mode, tried both 16 and 32, but if I go fullscreen the game goes off screen and I'm not able to see part of the gui, making it impossible to play in fullscreen. Please tell me how to configure the settings properly, because it's the first time I have this issue, and I'm not sure it is a bug. Thanks in advance

Request for ALT-key etherbar/number toggles

Would it be possible to have an alt toggle for ether bars/numbers I suggest alt j, alt k, as I don't think they are currently used? Also they are in the keyboard group of alt b,h,n which are already used for char health names bars numbers etc. caladina via forum.

Controlling the camera with the right mouse button

I have the same problem as this person:

http://www.eternal-lands.com/forum/index.php?showtopic=59790

The Problem: When I move in maps i frequently use the camera. May it be for fighting in invasion or hunting for pears and clicking everything harvestable. It needs a lot of camera ajustments. Now the problem with that is that the middle mouse button requires relatively strong force with your finger to push down. It doesnt take long and your hand tires and you need to stop playing. The other problem is that there is no setting in EL that let's you take care of changing the mouse control.

I patched events.c to switch the middle and right buttons.
Posting just in case someone needs it.

diff --git a/events.c b/events.c
index 3473b2e..d095f41 100644
--- a/events.c
+++ b/events.c
@@ -203,10 +203,13 @@ int HandleEvent (SDL_Event *event)
            {
                if (event->button.button == SDL_BUTTON_LEFT)
                    left_click++;
+                                // switch middle and right
                else if (event->button.button == SDL_BUTTON_RIGHT)
-                   right_click++;
+                                  //right_click++;
+                                  middle_click++;
                else if (event->button.button == SDL_BUTTON_MIDDLE)
-                   middle_click++;
+                                  //middle_click++;
+                                  right_click++;
            }
            else
            {
@@ -222,7 +225,9 @@ int HandleEvent (SDL_Event *event)

                if (event->type == SDL_MOUSEMOTION && (event->motion.state & SDL_BUTTON_RMASK))
                {
-                   right_click++;
+                                  // switch
+                                  //right_click++;
+                                  middle_click++;
 #ifdef OSX
                    if (osx_right_mouse_cam)
                    {
@@ -232,7 +237,9 @@ int HandleEvent (SDL_Event *event)
                }
                else
                {
-                   right_click = 0;
+                                  // switch
+                                  //right_click = 0;
+                                  middle_click = 0;
 #ifdef OSX
                    if (osx_right_mouse_cam)
                    {
@@ -243,15 +250,21 @@ int HandleEvent (SDL_Event *event)

                if (event->type == SDL_MOUSEMOTION && ((event->motion.state & SDL_BUTTON_MMASK) || meta_on))
                {
-                   middle_click++;
+                                  // switch
+                                  //middle_click++;
+                                  right_click++;
                }
                else
                {
-                   middle_click = 0;
+                                  // switch
+                                  //middle_click = 0;
+                                  right_click = 0;
                }
            }

-           if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_MMASK) || have_mouse)
+                        // switch
+           //if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_MMASK) || have_mouse)
+           if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_RMASK) || have_mouse)
            {
                camera_rotation_speed = camera_rotation_speed*0.5 + normal_camera_rotation_speed * mouse_delta_x*0.00025;
                camera_tilt_speed = camera_tilt_speed*0.5 + normal_camera_rotation_speed * mouse_delta_y*0.00025;

Furthermore I would like to use the mouse wheel to switch between walk/look/use/...
In that case, zoom in/out would be bound to ctrl + mouse wheel.
Or, I might want it the other way around, with zoom as it is now, and holding down control to switch between actions.
For now I switch between actions by pressing the middle button (the wheel) down.

If it is too difficult to have complete control of the buttons in key.ini or whatever, perhaps a simple "switch middle and right mouse buttons" option would be good enough.

Items in multiple sto categories should not show when traded

When storage trading, if you put all of an item into the trade window, it stops showing in your storage window.

(i.e. you have 10 daffodils, you put all 10 in trade window and they immediately no longer show in the storage)

However, if you trade something that's in multiple categories (examples: bones are in Animal and Weapons, low-level leather stuff is in Armor and Clothes) this does not happen.

(i.e. you have 2 leather boots, you put both in the trade window, it still shows 2 leather boots in storage)

This is not that important of course, but it would be great if these could disappear from sto window like other items while trading. (I notice it since I trade bones a lot with alts and I have to actually look to see if all the bones are in the trade window.)

EDIT: As well, when ALL of one of these objects are placed into the trade window, the object remains attached to the cursor, which doesn't happen for objects in single categories.

Crashes on Mac OS X 9 Mavericks

The program terminates itself after opening with an error message:

Process:         EternalLands [29474]
Path:            /Users/USER/Downloads/*/EternalLands.app/Contents/MacOS/EternalLands
Identifier:      com.eternal-lands.EternalLands
Version:         1.9.3
Code Type:       X86 (Native)
Parent Process:  launchd [321]
Responsible:     EternalLands [29474]
User ID:         501

Date/Time:       2013-10-25 19:14:05.899 +0200
OS Version:      Mac OS X 10.9 (13A603)
Report Version:  11
Anonymous UUID:  XX123


Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
abort() called

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x97848952 __pthread_kill + 10
1   libsystem_pthread.dylib         0x96fae167 pthread_kill + 101
2   libsystem_c.dylib               0x97698340 abort + 155
3   com.eternal-lands.EternalLands  0x001b765d __eprintf + 77
4   com.eternal-lands.EternalLands  0x001980eb CalCoreModel_ELLoadCoreAnimation + 251
5   com.eternal-lands.EternalLands  0x0002e3bb cal_load_anim + 315
6   com.eternal-lands.EternalLands  0x0000b912 parse_actor_frames + 3026
7   com.eternal-lands.EternalLands  0x00010daa parse_emotes_defs + 362
8   com.eternal-lands.EternalLands  0x00010fd8 read_emotes_defs + 200
9   com.eternal-lands.EternalLands  0x000c5f61 init_stuff + 897
10  com.eternal-lands.EternalLands  0x000de87c SDL_main + 92
11  com.eternal-lands.EternalLands  0x00003a88 -[SDLMain applicationDidFinishLaunching:] + 56
12  com.apple.Foundation            0x98ab0692 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke + 49
13  com.apple.CoreFoundation        0x9b9917e4 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20
14  com.apple.CoreFoundation        0x9b8733fb _CFXNotificationPost + 3435
15  com.apple.Foundation            0x98a9eebf -[NSNotificationCenter postNotificationName:object:userInfo:] + 92
16  com.apple.AppKit                0x93c387d5 -[NSApplication _postDidFinishNotification] + 367
17  com.apple.AppKit                0x93c38475 -[NSApplication _sendFinishLaunchingNotification] + 239
18  com.apple.AppKit                0x93c34da4 -[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] + 840
19  com.apple.AppKit                0x93c34691 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 277
20  libobjc.A.dylib                 0x96e1d304 -[NSObject performSelector:withObject:withObject:] + 77
21  com.apple.Foundation            0x98abf3fa __76-[NSAppleEventManager setEventHandler:andSelector:forEventClass:andEventID:]_block_invoke + 121
22  com.apple.Foundation            0x98abef31 -[NSAppleEventManager dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 430
23  com.apple.Foundation            0x98abed3b _NSAppleEventManagerGenericHandler + 218
24  com.apple.AE                    0x91681b15 aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned long, unsigned char*) + 387
25  com.apple.AE                    0x91650ed6 dispatchEventAndSendReply(AEDesc const*, AEDesc*) + 44
26  com.apple.AE                    0x91650dce aeProcessAppleEvent + 318
27  com.apple.HIToolbox             0x982f47c1 AEProcessAppleEvent + 55
28  com.apple.AppKit                0x93c303a8 _DPSNextEvent + 1089
29  com.apple.AppKit                0x93c2fad0 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 119
30  com.apple.AppKit                0x93c2235c -[NSApplication run] + 727
31  com.eternal-lands.EternalLands  0x00003a1c CustomApplicationMain + 236
32  com.eternal-lands.EternalLands  0x00003c80 main + 176
33  com.eternal-lands.EternalLands  0x00002ee2 _start + 216
34  com.eternal-lands.EternalLands  0x00002e09 start + 41

compile error with gcc 7.1.1

icon_window.cpp: In member function ‘virtual std::pair<float, float> IconWindow::Basic_Icon::get_uv()’:
icon_window.cpp:357:46: error: call of overloaded ‘abs(Uint32)’ is ambiguous
if (abs(SDL_GetTicks() - last_flash_change) > 250)

Is the abs here necessary for a 32bit unsigned integer?

Wayland support.

I recently tried running EL under wayland instead of Xorg.
On NVIDIA closed source driver with Xorg, I can easily get 90+ FPS but it is capped on 60 since this is a 60hz monitor.
On nouveau open source driver with Xorg, I get ~15FPS.
On nouveau with wayland, I was getting 30FPS which is pretty good. But EL was using Xwayland instead of directly wayland. Xwayland was eating ~400Kbytes per minute this way. It apparently doesn't like EL.
Can EL be ported to work natively under Wayland thus bypassing Xwayland and avoiding the leaks?
Thank you.

Deleted object being used to determine what to show on insides maps

TBH this can wait till 1.9.6 if it can't be figured out quickly.

There's coding for inside (dungeon) maps that if something is too far separated by blank space, it cannot be seen. For example, a map with house insides, if separated by enough space you cannot see the insides of other houses in the distance when you enter one.

This is broken by deleted objects. When a 3D object is deleted in the map editor, the 'blending_level' gets set to 20 rather than completely removing it from the file, to prevent changing of object ID numbers.

The code to "not see" the insides of other areas does not take this into account, and uses the deleted objects in determining what to show.

Example: a map has 2 house insides, and you cannot see one from inside the other.

I place an object between them that makes them too close, and you can now see one from inside the other.

I delete the object with no other changes. The client is still reading that deleted object is there, and you can still see inside one from the other.

What should happen: The code that determines what inside area to show should strip any objects with a blending level of 20 from information first before making this determination.

Also: Perhaps in the map editor code, when an object is deleted, it doesn't just set blending_level to 20, but also the position x and y both to something like -60, way off the map?

Server marks (newbie tutorial) remaining when switching between clients

If a player starts the tutorial and gets a server mark on one client, and continues it on another, the server mark will remain on the first client. Only way to delete it currently is get rid of the servermarks file itself.

These would be better actually being saved and sent from the server but that probably won't happen. ;)

But esp. now with Android out there, there should be some way to eliminate the server mark without touching files.

The only bandage I could think of to put on this wound... the player stands where the mark is at and has a #command to delete the mark at that location?

An old issue, but has been seen a couple times in chat lately.

SDL2 port

Is there anyone willing to work at a SDL2 port?
This would enable us to eventually have GLES support, Android, etc. We can also implement touch and other things specific to phones and tablets.

Visual Bug on Gear when switched while ranging

Reported on the OL forums by SAWolf but effecting the EL client too:

"Basically you are walking around with bow and arrow equipped and you fire at an unsuspecting critter then switch gear either boots, pants, torso, helm, cape or medallion over to something else. None of the equipment changes show on the character until you either unequip one of the ranging items or take a step."

Compiling under windows, with CodeBlocks

I tried compiling the client in CodeBlocks, but I am getting some issues I can't figure out.
I am getting a lot of undefined calls in Cal3d, such as:

Release\actor_init.o:actor_init.cpp:(.text+0x1ab9): undefined reference to CalModel::getUserData() const' Release\actor_init.o:actor_init.cpp:(.text+0x1b58): undefined reference toCalHardwareModel::selectHardwareMesh(unsigned int)'
Release\actor_init.o:actor_init.cpp:(.text+0x1b64): undefined reference to `CalHardwareModel::getBoneCount() const'

I am linking with Cal3d (0.110), but it seems as though it doesn't even matter, not linking with it produces similar messages. Any ideas?

libopenal change in version 1.18.2 breaks sound

I was emailed by a gentoo user experiencing sound breakage with libopenal verison 1.18.2, 1.15.1 works fine. Ubuntu 18.04 LTS is to be released soon and also uses libopenal verison 1.18.2 and I have found also breaks sound. I have tracked down the problem to usage of alGetSourcei(), discussed here: kcat/openal-soft#126 which tells of a change to the library removing behaviour EL is using but which is not part of the openAL specification. I do not yet understand how to fix this properly, even though the link above discussed a solution.

However, I have a temporary fix that works around the problem, see this patch.txt. It looks to me that the related code has been broken for some time.

Option to swich left/right sound perspective

Mono sound files played by the game engine are mapped to the stereo panorama depending on the angle between the game actor and the relative direction of the actor and the sound source. Since this angle is not identical to the users/camera perspective it produces misleading results.

For instance:
If the actors face points to the camera, a sound source (e.g. monster) on the left side of the actor is played from the right side (loudspeaker/headset). IMHO it would be MUCH better if the spatial reference of sound is the camera angle and not the actor angle.

Forum post

Proposal: Have a tool that converts all the XML files to binaries for the client

I don't think it makes much sense loading XML at runtime, especially since it very rarely changes.
I think it would be better if there was a tool that converted all the XML files to binaries, that are loaded at runtime by the client. This way we get rid of two dependencies (libxml2 and iconv), and would speed things up a bit, especially for slower devices, such as phones, raspberry pies, etc.

Lock hud button for skill bars

Just a button option to lock the skill bars at the bottom of the interface. That way if I misclick on one of the skills in the status bars it doesn't change the skill bars at the bottom. Forum post

No documentation

I'm trying to build the code under Linux, but I have no idea of which dependencies are required. Also writing in the readme that the Makefile.linux must be renamed could be good.

This is the first error, but I think more would come:

platform.h:110:11: fatal error: AL/al.h: No such file or directory
#include <AL/al.h>

I tried the installer from the website, but a segmentation fault arises.
Please add some documentation about dependencies.

Cosmetic - Lines around "bag" squares

spectacle t29156

The left and bottom of the bag look a bit awkward without lines to show the full squares, it just "feels" like something's missing when you look at it.

Obviously just a cosmetic issue, but if it's possible perhaps it would look better with lines?

ranging lock indicator

Hi. Is it possible to add 'ranging lock' on/off indicator in the lower right side of the window near the Special|harvest|poisoned|messages indicator?
Thank you.

Add option to log NPC text

gnewbie asked for an option to log NPC text.

Perhaps the simplest version would:

  • Enable logging on a per NPC basis.
  • Set the option using a checktext box on the NPC name context menu.
  • Remember which NPC have the option enabled using a file save to the users configuration folder.
  • Log all the text for the NPC dialogue but only to the console.

More complex options could include:

  • The NPC dialogue could display a more obvious checkbox at the base of the window.
  • Selected from an option in the options window:
    • Logging to a single new log file.
    • Logging to a NPC named log file.
    • Logging to a NPC named tab in the Notebook.

Alt+x and Ctrl+q are hard wired, to quit

Ctrl-i to open the inventory is rather awkward with one hand, so I put this in my key.ini

#K_ITEMS = LCTRL q

I think check_quit_or_fullscreen should check they key bindings first before quitting.

Force "stand up" if sitting on shapeshift

If the player shapeshifts (to mule/phoenix), would it be possible to check if the player is sitting, and if so force the player to standup when the shift occurs?

As there is no "sit" while shapeshifted, this shouldn't be a problem to automatically do for the player.

This is an old "annoyance" because stand doesn't work after the shift, and while there's ways to work around it, a sitting player can't just click to move when shifts (when the setting to not move while sitting is on, which it is for most).

Compilation issue with macOS

I am trying to compile Eternal-Lands on my iMac (2011) and looks like the code was not updated for Intel macs. Has there been any efforts to port the codebase to macs?

$ make --file Makefile.osx
Makefile.osx:96: target `gamewin.o' given more than once in the same rule.
Makefile.osx:96: target `gl_init.o' given more than once in the same rule.
gcc -mpowerpc -malign-natural   -O -pipe -DOSX -DELC -DNO_MUSIC -DATI_9200_FIX -DBUG_FIX_3D_OBJECTS_MIN_MAX -DUSE_FRAMEBUFFER -DNEW_FRUSTUM -DAUTO_UPDATE -DNEW_TEX -DCOUNTERS -DNEW_E3D_FORMAT -DALUT_WAV -I/usr/include -I/usr/include/libxml2 -I/opt/local/include/ -I/Library/Frameworks/SDL.framework/Headers -D_REENTRANT -I/Library/Frameworks/SDL_net.framework/Versions/A/Headers/ -I/System/Library/Frameworks/OpenGL.framework/Headers/ -c -o 2d_objects.o 2d_objects.c
clang: error: unknown argument: '-mpowerpc'
clang: error: unknown argument: '-malign-natural'
make: *** [2d_objects.o] Error 1

Spurious "Couldn't find the GL_ARB_point_sprite extension, not using it..." message

Not important, there are no ill effects other than the message being printed.

Patch:

diff --git a/gl_init.c b/gl_init.c
index 8ecbae9..93f1217 100644
--- a/gl_init.c
+++ b/gl_init.c
@@ -645,7 +645,7 @@ void init_gl_extensions()
        /*      GL_EXT_compiled_vertex_array            */

        /*      GL_ARB_point_sprite                     */
-       if (have_extension(ext_compiled_vertex_array))
+       if (have_extension(arb_point_sprite))
        {
                safe_snprintf(str, sizeof(str), gl_ext_found, "GL_ARB_point_sprite");
                LOG_TO_CONSOLE(c_green2, str);

"Assertion `self' failed" crash

Trying to run the latest git checkout fails with:

el.x86.linux.bin: io/cal3d_io_wrapper.cpp:261: int CalCoreModel_ELLoadCoreAnimation(CalCoreModel_, const char_, float): Assertion `self' failed.

The backtrace:
#0 0x00000037dfa35ba5 in raise () from /lib64/libc.so.6
#1 0x00000037dfa37358 in abort () from /lib64/libc.so.6
#2 0x00000037dfa2e972 in __assert_fail_base () from /lib64/libc.so.6
#3 0x00000037dfa2ea22 in __assert_fail () from /lib64/libc.so.6
#4 0x000000000058c0df in CalCoreModel_ELLoadCoreAnimation (self=0x0,

strFilename=0x7fffffffdad0 "./animations/emotes/player_waveleft_stand.caf", scale=0) at io/cal3d_io_wrapper.cpp:261

#5 0x0000000000441621 in cal_load_anim (act=0xb11e00 <actors_defs>,

str=0x7fffffffdc30 "./animations/emotes/player_waveleft_stand.caf 1", 
sound=0x656867 "", sound_scale=0x656867 "", duration=-1) at cal.c:408

#6 0x00000000004221a1 in parse_actor_frames (act=0xb11e00 <actors_defs>,

cfg=0x2095e80, defaults=0x0) at actor_scripts.c:3930

#7 0x000000000041d880 in parse_emotes_defs (node=0x20766b0)

at actor_scripts.c:2755

#8 0x000000000041db8a in read_emotes_defs (dir=0x660180 "",

index=0x660175 "emotes.xml") at actor_scripts.c:2803

#9 0x000000000048c06b in init_stuff () at init.c:884
#10 0x00000000004b45ec in main (argc=1, argv=0x7fffffffe2c8) at main.c:444

I tried it with/without EXT_ACTOR_DICT set and/or the actor_defs directory in git.

AFAICT act->coremodel is never getting set (parse_actor_nodes() doesn't get called) before calling cal_load_anim() so a NULL value is passed in to CalCoreModel_ELLoadCoreAnimation().

A "change server" button?

(Esp. now with the Android not being as simple to switch.)

I was thinking something along the lines of a button on the login screen to "change server".

Clicked it gives some form of list of the names given to all server options in servers.lst. Select one, and the client disconnects from the current server, connecting to the other one.

Sound disappears when restarting

If I leave the game with audio disabled in the menu, then restart the game and enable the audio, only the music plays, but sounds such as footsteps etc. aren't played. Enabling and restarting solves the problem, but is bit annoying. I'm using the debian build, installed with apt-get

Map editor - Option to turn reflections off ("code" included, just need implement)

My Perl-only brain ain't helping with this, but it should be quite simple to do. I can explain what to do, just not sure how to properly implement it.

In map_editor/mapedit.ini -

add these 3 lines

Reflections when editing maps with water can be problematic, not recommended while editing.
Turn on only if you actually need them for some reason.
#show_reflections = 0

Then in map_editor/draw_scene.c , change line 87 to something like this:


    if(show_reflections)
        any_reflection=find_reflection();  // <- the actual line 87
    else
        any_reflection=0;

(Actually, any_reflection is set by default to 0 at the top of the void this is in, so the "else" part is unnecessary. Leaving to indicate the proper result for any_reflection.)

Not sure if that's the proper way to do it in C++, but the basic gist is if show_reflections in mapedit.ini is 0, then don't bother with find_reflection and set any_reflection to 0 so future calls to reflections will be skipped.

My main issue is I'm not sure how to call the value of show_reflections in C++, otherwise I'd have tried doing this myself.

(I have tested this by just directly setting any_reflection to 0 and compiling that way... huge improvement in the editor working around water.)

The option to turn off reflections not only turns off reflections, but the entire screen's background color doesn't change to blue just because water shows up... one of the single most annoying aspects of the editor. I really wish I'd thought to change this sooner.

Minimap title bar can be off screen after video or scale resize.

The current checks to ensure the mini-map remains on-screen after scale or video size changes, does not take the special title bar into consideration. This means the window can be visible but partially off-screen and unmovable because the title bar is off-screen,

Storage item count under the scroll bar

storage

Not the best example, but enough to show it... is it possible for the number text to be above the scroll bar on the right? Without it causing other issues, that is.

There are times it's hard to distinguish the actual count, just not in this particular shot.

EL client doesn't work with nvidia beta driver 367.18 (crash a second after login)

After updating to nvidia's new driver, EL crashes a second after logging in. Sadly, nvidia doesn't provide debug libraries. Any ideas?

Core was generated by `./el'.
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f23ea9d0275 in raise () from /usr/lib/libc.so.6

Current thread is 1 (Thread 0x7f23ede11740 (LWP 1386)) bt full
#0 0x00007f23ea9d0275 in raise () from /usr/lib/libc.so.6

No symbol table info available.
#1 0x00007f23ea9d168a in abort () from /usr/lib/libc.so.6

No symbol table info available.
#2 0x00007f23e879a249 in ?? () from /usr/lib/libGLX_nvidia.so.0

No symbol table info available.
#3 0x00007f23e78c17f3 in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#4 0x00007f23e78c1eb2 in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#5 0x00007f23e784d88d in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#6 0x00007f23e780e6bc in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#7 0x00007f23e780ef75 in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#8 0x00007f23e7822fa2 in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#9 0x00007f23e782367e in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#10 0x00007f23e77c2693 in ?? () from /usr/lib/libnvidia-glcore.so.367.18

No symbol table info available.
#11 0x00007f23e74174cb in ?? () from /usr/lib/libnvidia-glcore.so.367.18

---Type to continue, or q to quit---
No symbol table info available.
#12 0x00000000004587d6 in draw_scene () at draw_scene.c:119

No locals.
#13 0x00000000004af346 in start_rendering () at main.c:220

    event = {type = 105 'i', active = {type = 105 'i', gain = 110 'n', 
        state = 105 'i'}, key = {type = 105 'i', which = 110 'n', 
        state = 105 'i', keysym = {scancode = 32 ' ', sym = 26214, 
          mod = KMOD_NONE, unicode = 0}}, motion = {type = 105 'i', 
        which = 110 'n', state = 105 'i', x = 29472, y = 30068, 
        xrel = 26214, yrel = 0}, button = {type = 105 'i', 
        which = 110 'n', button = 105 'i', state = 116 't', x = 29472, 
        y = 30068}, jaxis = {type = 105 'i', which = 110 'n', 
        axis = 105 'i', value = 29472}, jball = {type = 105 'i', 
        which = 110 'n', ball = 105 'i', xrel = 29472, yrel = 30068}, 
      jhat = {type = 105 'i', which = 110 'n', hat = 105 'i', 
        value = 116 't'}, jbutton = {type = 105 'i', which = 110 'n', 
        button = 105 'i', state = 116 't'}, resize = {type = 105 'i', 
        w = 1970565920, h = 26214}, expose = {type = 105 'i'}, quit = {
        type = 105 'i'}, user = {type = 105 'i', code = 1970565920, 
        data1 = 0x6666, data2 = 0x0}, syswm = {type = 105 'i', 
        msg = 0x6666}}
    done = 0
    network_thread_data = {0xfbc1ff0, 0xac0100 <done>}
    last_frame_and_command_update = 0
    network_thread = 0xfa79810
    message_queue = 0xfbc1ff0

#14 0x00000000004afb1c in main (argc=1, argv=0x7ffd7a094908) at main.c:467

No locals.

Particles not showing in zoomed out camera view

Particles do not get rendered if the camera is more than 4.5 or so "zoomed out".

The 4.5 being a reference to the Camera > Maximum Camera Zoom Out option which goes up to 8.0.

https://youtu.be/JNm3vhjFYx0

Not the greatest video, but you can see this in action. I start with the camera at a full "8.0" zoomed out as far as possible and slowly zoom in. At around 11 seconds, you see the particles for the Bethel fast-heal waterfall suddenly make an appearance. They disappear at around the same zoom later when zooming back out.

Noticed this a long time ago, but simply didn't care. However as I go through all the maps while editing I'm noting particles can be a necessity in certain situations to make some sense of the design.

This may possibly be a result of the client having had the "Maximum Camera Zoom Out" changed a couple releases back to allow it to go further out. Particles may possibly have been limited to the original max camera and need to be changed to show up to the current zoom out?

This happens with all particles that I've noticed, not just the shown example.

Background on S H P M indicators won't stay on

For the right-click "Background On" option for the S H P M indicators, the background will turn off by itself when you press TAB to go from viewing the tab map back to regular game view. There's basically no way to keep the background on with this happening, which I prefer as it makes the letters more noticeable.

Possibly other ways, but that's a confirmed one.

"Mixed item filter" prevents printing of item info to chat window

Steps to reproduce:

  • Verify that "Mixed item filter" in Chat options is activated
  • Close Inventory/Manufacture window
  • Click any item in a quickslot with the eye cursor

Result: Nothing gets printed to the chat console
Expected result: Item description printed to console

Version used: 1.9.5p2

memory.h must be renamed

This file is causing problems in the Android build. stdio.h includes our file instead of its own file :/
We should change it to el_memory.h or something.

Crash w/OpenGL 2.1 AMD/Linux driver without the GL_ARB_vertex_buffer_object extension available

I will describe how I got el to work with the fairly new AMD radeon crimson 15.302 driver for Linux.
The problems described here may be of interest if there are problems with other new drivers as well.
I have since downgraded to an older "catalyst" driver, which does not have any of these problems.

relevant section from glxinfo:

OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: AMD Radeon R9 200 / HD 7900 Series
OpenGL version string: 1.4 (2.1 (4.5.13416 Compatibility Profile Context 15.302))
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_fragment_program, 
    GL_ARB_fragment_program_shadow, GL_ARB_framebuffer_object, GL_ARB_imaging, 
    GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_occlusion_query, 
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow, 
    GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_compression, GL_ARB_texture_cube_map, 
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine, 
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, 
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_rectangle, GL_ARB_transpose_matrix, GL_ARB_vertex_program, 
    GL_ARB_window_pos, GL_ATIX_texture_env_combine3, GL_ATI_draw_buffers, 
    GL_ATI_texture_env_combine3, GL_ATI_texture_mirror_once, GL_EXT_abgr, 
    GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_equation_separate, 
    GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract, 
    GL_EXT_copy_texture, GL_EXT_draw_range_elements, GL_EXT_fog_coord, 
    GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, 
    GL_EXT_framebuffer_object, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, 
    GL_EXT_point_parameters, GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, GL_EXT_stencil_wrap, 
    GL_EXT_subtexture, GL_EXT_texture3D, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, GL_EXT_texture_lod, 
    GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp, 
    GL_EXT_texture_object, GL_EXT_texture_rectangle, GL_EXT_vertex_array, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_NV_texture_rectangle, GL_SGIS_generate_mipmap, 
    GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, 
    GL_SGIS_texture_lod, GL_SGIX_shadow_ambient, GL_SUN_multi_draw_arrays

Since el seems to require VBO, I made it use the non-ARB procedures when the extension is not available.
Like this:

diff --git a/load_gl_extensions.c b/load_gl_extensions.c
index 20efa84..ac32883 100644
--- a/load_gl_extensions.c
+++ b/load_gl_extensions.c
@@ -892,6 +892,26 @@ static GLboolean el_init_GL_ARB_vertex_buffer_object()
        return r;
 }

+/* VBO is a core part of OpenGL versions >= 1.5 */
+static GLboolean el_init_GL_CORE_vertex_buffer_object()
+{
+       GLboolean r = GL_TRUE;
+
+       r = ((ELglBindBufferARB = (PFNGLBINDBUFFERARBPROC)SDL_GL_GetProcAddress("glBindBuffer")) != NULL) && r;
+       r = ((ELglBufferDataARB = (PFNGLBUFFERDATAARBPROC)SDL_GL_GetProcAddress("glBufferData")) != NULL) && r;
+       r = ((ELglBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)SDL_GL_GetProcAddress("glBufferSubData")) != NULL) && r;
+       r = ((ELglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)SDL_GL_GetProcAddress("glDeleteBuffers")) != NULL) && r;
+       r = ((ELglGenBuffersARB = (PFNGLGENBUFFERSARBPROC)SDL_GL_GetProcAddress("glGenBuffers")) != NULL) && r;
+       r = ((ELglGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)SDL_GL_GetProcAddress("glGetBufferParameteriv")) != NULL) && r;
+       r = ((ELglGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)SDL_GL_GetProcAddress("glGetBufferPointerv")) != NULL) && r;
+       r = ((ELglGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)SDL_GL_GetProcAddress("glGetBufferSubData")) != NULL) && r;
+       r = ((ELglIsBufferARB = (PFNGLISBUFFERARBPROC)SDL_GL_GetProcAddress("glIsBuffer")) != NULL) && r;
+       r = ((ELglMapBufferARB = (PFNGLMAPBUFFERARBPROC)SDL_GL_GetProcAddress("glMapBuffer")) != NULL) && r;
+       r = ((ELglUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)SDL_GL_GetProcAddress("glUnmapBuffer")) != NULL) && r;
+
+       return r;
+}
+
 static GLboolean el_init_GL_ARB_occlusion_query()
 {
        GLboolean r = GL_TRUE;
@@ -1198,6 +1218,12 @@ void init_opengl_extensions()
                {
                        extensions |= 1 << arb_vertex_buffer_object;
                }
+       } else {
+               e = el_init_GL_CORE_vertex_buffer_object();
+               if (e == GL_TRUE)
+               {
+                       extensions |= 1 << arb_vertex_buffer_object;
+               }
        }
 /*     GL_ARB_vertex_buffer_object             */
 /*     GL_ARB_shadow                           */

Without the above patch el crashes when attempting to call ELglGenBuffersARB (which is NULL)
For example, when creating a new character:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x000000000065761b in eternal_lands::HardwareBuffer::HardwareBuffer (
    this=0x1ea5ea0) at engine/hardwarebuffer.cpp:16
#2  0x0000000000603728 in ec::Effect::Effect (this=0x1ea5e20)
    at eye_candy/eye_candy.h:2034
#3  0x0000000000605860 in ec::CampfireEffect::CampfireEffect (this=0x1ea5e20, 
    _base=0xadbec0 <eye_candy>, _dead=0x1ea5e00, _pos=0x1ea5d88, 
    _obstructions=0xadc0c0 <fire_obstructions_list>, _hue_adjust=0, 
    _saturation_adjust=1, _scale=1.5, _LOD=10)
    at eye_candy/effect_campfire.cpp:209
#4  0x00000000005cf104 in ec_create_campfire (x=26.9383049, y=79.5691757, z=0, 
    hue_adjust=0, saturation_adjust=1, LOD=10, scale=1.5)
    at eye_candy_wrapper.cpp:1433
#5  0x00000000004dcfc8 in real_add_particle_sys (
    file_name=0x7fffffffdba0 "./particles/fire_big.part", x_pos=26.9383049, 
    y_pos=79.5691757, z_pos=0, dynamic=0) at particles.c:780
#6  0x00000000004dcaaf in add_map_particle_sys (
    file_name=0x7fffffffdba0 "./particles/fire_big.part", x_pos=26.9383049, 
    y_pos=79.5691757, z_pos=0, dynamic=0) at particles.c:718
#7  0x0000000000498b8e in do_load_map (
    file_name=0x6ab13c "./maps/newcharactermap.elm", 
    update_function=0x4b860b <updat_func>) at io/map_io.c:599
...

This happens even if vertex buffer is disabled in settings.
Even with the above patch, if vertex buffer is enabled, el crashes in draw_water_background.

I did the same thing for ARB_vertex_shader and ARB_shader_objects,
and forced arb_fragment_shader and arb_shading_language_100 to be supported as they should be.
Unfortunately the shaders would not compile.

I was able to create a new character with the above patch, but
ran into some problems with the eye candy.
I didn't see any obvious reasons for the crashes or null buffer, so I just disabled the relevant code.

diff --git a/eye_candy/effect_selfmagic.cpp b/eye_candy/effect_selfmagic.cpp
index a0698ac..02db324 100644
--- a/eye_candy/effect_selfmagic.cpp
+++ b/eye_candy/effect_selfmagic.cpp
@@ -778,6 +778,8 @@ namespace ec
        void SelfMagicEffect::draw(const Uint64 usec)
        {
 #ifdef NEW_TEXTURES
+               // crash after getting off boat?
+               //return;
                if (capless_cylinders != 0)
                {
                        capless_cylinders->draw(alpha_scale);
diff --git a/eye_candy/effect_teleporter.cpp b/eye_candy/effect_teleporter.cpp
index adfaf7e..f65b2d6 100644
--- a/eye_candy/effect_teleporter.cpp
+++ b/eye_candy/effect_teleporter.cpp
@@ -196,6 +196,8 @@ namespace ec
        void TeleporterEffect::draw(const Uint64 usec)
        {
 #ifdef NEW_TEXTURES
+               // crashed...
+               //return;
                capless_cylinders->draw(1.0f);
 #else  /* NEW_TEXTURES */
                for (std::vector<Shape*>::iterator iter = capless_cylinders.begin(); iter
diff --git a/eye_candy/eye_candy.cpp b/eye_candy/eye_candy.cpp
index 563c3f4..f40d2e6 100644
--- a/eye_candy/eye_candy.cpp
+++ b/eye_candy/eye_candy.cpp
@@ -218,6 +218,7 @@ namespace ec
                corner[2] = Vec3(pos + base->corner_offset1 * size);
                corner[3] = Vec3(pos - base->corner_offset2 * size);

+               if (buffer == NULL) return;
                for (i = 0; i < 4; i++)
                {
                        index = particle_count * 4 + i;
@@ -928,6 +929,7 @@ namespace ec

                vertex_buffer.bind(el::hbt_vertex);
                vertices = static_cast<CaplessCylindersVertex*>(vertex_buffer.map(el::hbt_vertex, el::hbat_write_only));
+                if (vertices == NULL) return; // crash entering boat on Isla Prima (vertices was null)

                size = 3 * sizeof(GLushort) * facet_count;

I was able to create a new character, and complete the newbie tutorial with the above patches.
No shadows or reflections. The ocean and puddles were just one solid color with a slight gradient.

Now I am using the older catalyst drivers (version 15.201.1151) that supports all the extensions.
No problems whatsoever.

EL client crashed when a few people summoned a lot of things in WS city castle

systemd logged this:
PID: 4562 (el.x86.linux.bi)
UID: 1000 (hussam)
GID: 100 (users)
Signal: 11 (SEGV)
Timestamp: Sun 2014-10-26 21:24:09 EET (1min 28s ago)
Command Line: ./el.x86.linux.bin
Executable: /home/hussam/games/el_linux/el.x86.linux.bin
Control Group: /user.slice/user-1000.slice/session-c2.scope
Unit: session-c2.scope
Slice: user-1000.slice
Session: c2
Owner UID: 1000 (hussam)
Boot ID: 1c708dbd83b2416483c54d41c37175dd
Machine ID: efb490e643e2436d9d1138df1745a008
Hostname: hades
Message: Process 4562 (el.x86.linux.bi) of user 1000 dumped core.

            Stack trace of thread 4562:
            #0  0x000000000041ef33 add_command_to_actor (el.x86.linux.bin)
            #1  0x00000000004e7948 process_message_from_server (el.x86.linux.bin)
            #2  0x00000000004d1f11 start_rendering (el.x86.linux.bin)
            #3  0x00000000004d2947 main (el.x86.linux.bin)
            #4  0x00007f47d07f4040 __libc_start_main (libc.so.6)
            #5  0x0000000000410b04 _start (el.x86.linux.bin)

            Stack trace of thread 4563:
            #0  0x00007f47d33aa8bf pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
            #1  0x00007f47d360c83e SDL_CondWait (libSDL-1.2.so.0)
            #2  0x0000000000509f0e queue_pop_blocking (el.x86.linux.bin)
            #3  0x0000000000553b2e load_enhanced_actor_thread (el.x86.linux.bin)
            #4  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #6  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #7  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4564:
            #0  0x00007f47d33aa8bf pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
            #1  0x00007f47d360c83e SDL_CondWait (libSDL-1.2.so.0)
            #2  0x0000000000509f0e queue_pop_blocking (el.x86.linux.bin)
            #3  0x0000000000553b2e load_enhanced_actor_thread (el.x86.linux.bin)
            #4  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #6  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #7  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4566:
            #0  0x00007f47d33aa8bf pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
            #1  0x00007f47d360c83e SDL_CondWait (libSDL-1.2.so.0)
            #2  0x0000000000594447 custom_update_thread (el.x86.linux.bin)
            #3  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #4  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #6  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4565:
            #0  0x00007f47d33aa8bf pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
            #1  0x00007f47d360c83e SDL_CondWait (libSDL-1.2.so.0)
            #2  0x0000000000594447 custom_update_thread (el.x86.linux.bin)
            #3  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #4  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #6  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4571:
            #0  0x00007f47d33ada7d __nanosleep (libpthread.so.0)
            #1  0x00007f47d360e655 SDL_Delay (libSDL-1.2.so.0)
            #2  0x0000000000529575 update_streams (el.x86.linux.bin)
            #3  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #4  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #6  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4572:
            #0  0x00007f47d08b5313 __select (libc.so.6)
            #1  0x00007f47d2717d8f SDLNet_CheckSockets (libSDL_net-1.2.so.0)
            #2  0x00000000004eac68 get_message_from_server (el.x86.linux.bin)
            #3  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #4  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #6  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4567:
            #0  0x00007f47d33ada7d __nanosleep (libpthread.so.0)
            #1  0x00007f47d360e655 SDL_Delay (libSDL-1.2.so.0)
            #2  0x00007f47d360e6a2 n/a (libSDL-1.2.so.0)
            #3  0x00007f47d35caaf8 n/a (libSDL-1.2.so.0)
            #4  0x00007f47d360c019 n/a (libSDL-1.2.so.0)
            #5  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #6  0x00007f47d08bc3ed __clone (libc.so.6)

            Stack trace of thread 4570:
            #0  0x00007f47d08b35bd poll (libc.so.6)
            #1  0x00007f47ba5398d6 n/a (libasound.so.2)
            #2  0x00007f47d22d21fa n/a (libopenal.so.1)
            #3  0x00007f47d22d6be7 n/a (libopenal.so.1)
            #4  0x00007f47d33a5314 start_thread (libpthread.so.0)
            #5  0x00007f47d08bc3ed __clone (libc.so.6)

Request for used item counter

Kaddy said: Can you please add a "used/consumed" section in the counters? I posted this in @@6 and alot of people loved the idea.

Montez added: +1 for this idea as well Kaddy. I would love to know how many/much of an item I have "used". Something quite similar to the other counters, such as Alchemy, etc which require a simple click in the manufacture window to be put into its own category. I am hoping this type of counter could be added as well for consumables.

Porting to Android (thoughts)

Ok, so I've been thinking about the Android port for the last few days, and I think the following things need to be done:

Things that have to be removed from the client:

  1. Auto updates. We barely use it, and it is more difficult to implement properly on Android. We can also get rid of the zlib stuff.
  2. Logging. There is no point to have a chat log or other logs on Android, except for debugging purposes.
  3. Quite a few options will have to be removed from the Settings window.
  4. As I mentioned in the previous issue, we should get rid of the libxml2 and xml files, and instead have a tool that 'compiles' all the XML stuff into a binary format that the client loads at runtime.
  5. Screensaving ability. There is no need for this, and we get rid of the png library.

Things that have to be added:

  1. SDL2 port. This is really necessary for an Android port, and it is potentially good for non Android based devices that have a touch screen, since we can use touch stuff. Sir_Odie is working at this.
  2. If https://github.com/ptitSeb/glshim doesn't work, then we need to rewrite the OpenGL stuff to GLES 1.5
  3. Support for gestures.
  4. Support for the software keyboard.

Things that have to be changed:

  1. The whole GUI system needs to be redesigned (maybe just enlarged)? Probably all the GUI windows should be full screen, and have the inventory/trade window merged in case there is a trade.
  2. The fonts will probably have to be made much larger.
  3. File system functions might have to be changed a bit, but we'll have to see.
  4. Probably all the textures would have to be reduced in size. Most phones don't have enough video memory for all of them, and the GPUs might be fill rate limited.
  5. The way to identify the object under the mouse/finger will probably have to be changed.

This should be about it. Let me know if you think I missed something, or if you have some other ideas.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.