GithubHelp home page GithubHelp logo

iamgreaser / iceball Goto Github PK

View Code? Open in Web Editor NEW
113.0 36.0 32.0 17.74 MB

Open-source rewrite of the VOXLAP version of Ace of Spades.

Home Page: http://iceball.build

License: GNU General Public License v3.0

CMake 0.63% Makefile 0.07% Shell 0.14% Python 0.45% CSS 0.01% C 69.70% Lua 28.15% Batchfile 0.01% GLSL 0.34% C++ 0.31% Objective-C 0.21%

iceball's Introduction

Iceball logo Iceball is both a highly-extensible engine on top of which people can do anything they want, and a game that builds upon the classic version of Ace of Spades experience.

Getting started

Just want to play Iceball? You can grab the latest build from iceball.build. If you want to modify the source or just simply build Iceball yourself, follow the instructions on the wiki.

If you're planning on contributing to the Iceball project, please check out contribution guidelines on the wiki as well. All help is appreciated!

Community

Feedback

If you have some thoughts on how to improve this project, please use the subreddit to start a discussion about it. If the feature you want added is both clearly defined and plausible, you can open a issue in the issue tracker instead.

You should also use the issue tracker for reporting any bugs you find. Make sure they aren't already reported though!

More info

Check out the docs/ directory for some in-depth information regarding formats, engine intrinsics etc. Be aware that not all documentation may be up to date however. A lot of this information is being ported to the wiki to siphon out deprecated documentation.

License

Iceball is licensed under the regular GNU GPL version 3.
Ice Lua Components is licensed under the LGPL version 3.
Any of the "Team Sparkle" stuff is available under MIT, including the launcher.
All assets are released under Creative Commons 3.0 BY-SA:
  http://creativecommons.org/licenses/by-sa/3.0/

These are, unless otherwise marked:
  Copyright (C) 2012-2015, Iceball contributors.
  
The credits list is almost always out of date,
so check the git log for a list of contributors.

Ice Lua Components contains some content from libSDL,
  which is licensed under the LGPL version 2.1.
It is marked accordingly.

Code in src/external is licensed under their respective licenses,
  which are listed in LICENCE-others.txt.

The manual is in the public domain, except where otherwise specified.

Copyright (C) 2012-2015, Iceball contributors

iceball's People

Contributors

10se1ucgo avatar asiekierka avatar br- avatar dany-on-demand avatar ericson2314 avatar fkaa avatar iamgreaser avatar melchips avatar notafile avatar rakiru avatar triplefox avatar ucarion avatar unrealincident avatar vuolen 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iceball's Issues

Combine Makefiles

IMO there are way too many makefiles at the moment, this just makes things more confusing. If you all are OK with it I am certainly combine openGL and non-GL with a flag, and with a bit more effort probably get rid of separate ones for MinGW too.

Couple of nasty compiler warnings to fix in 0.0-33

In file included from src/lua.c:66:0:
src/lua_util.h:18:2: warning: #import is a deprecated GCC extension [-Wdeprecated]
src/lua_util.h: In function ‘icelua_fn_common_time’:
src/lua_util.h:49:2: warning: implicit declaration of function ‘time’ [-Wimplicit-function-declaration]

time() is declared in time.h.

Also going to note that including "common.h" is not necessary in the lua_*.h sections.

Whoever ends up making 0.0-34, could you please add these fixes along the way? Thanks.

Race condition causing an occasional crash in sackit when common.mus_free is called on the playing module

I've had it crash in sackit_module_free(). Colorpinpoint has had it crash in sackit_module_update().

Rebellion: Resistance of Complacency also had an issue in the way it handled sackit, although it was a different issue which was solved with a few minutes to spare. To avoid such an issue, I just didn't bother freeing the module.

Iceball, of course, is not a 48 hour competition entry.

I have a plausible solution for this.

PMF model format

The current model format (PMF) doesn't seem appropriate for the OpenGL renderer.

As a matter of fact, I don't see any obvious way of avoiding the z-fighting issues as nothing, in the format, prevents two polygons to share the same space.

Moreover, I can't apply smooth lighting as I did on the map.

Possible solutions

  1. improve PMF format
    • prevent two cubes to share the same space (maybe an octree-like structure could solve this ?)
  2. do boolean operations on cubes to remove shared faces (are you seriously considering it ?)
  3. add another format
    • like kv6 support ?

In my opinion, models should be created just as maps (placing/removing blocks while flying around the model like in the game, just like the current map editor).
That way, it would be a standard and easy interface.
We would need to handle a few things like the size of a block (to increase the model resolution, divide the size of the blocks by two), and the center of the model (to place it correctly in the game world).

What do yo think about this issue ? Have you got any other idea ? Am I missing something ?

Is models texturing out of the discussion because it can't be supported on both renderers ?

Side note

If I alter the following line in gl/render.c, the rifle hasn't any z-fighting issue on my box anymore as no faces are sharing the same space (but the others models aren't rendered properly because of the newly invalid radius value) :

render_pmf_cube(bone,
    pt->x/256.0f, pt->y/256.0f,
    pt->z/256.0f,
    pt->r,
    pt->g,
    pt->b,
    pt->radius*2.0f/256.0f);

to

render_pmf_cube(bone,
    pt->x/256.0f,
    pt->y/256.0f,
    pt->z/256.0f,
    pt->r,
    pt->g,
    pt->b,
    pt->radius*1.0f/256.0f);

PMF Editor Color Select

Pressing the arrow key to change colour on the PMF editor changes the colour, but releasing the key also changes it, causing you to skip colours.

Skybox and sun

Sigh... at least a sky gradient... but no render.c has to chaotic and include a lot redundant code...

but yeah, I'll see what I can do, if @iamgreaser could clarify where is the background color taken from I'd be happy.

Resolution as option in makefile

I think Grease said the the resolution was a compile time constant. If so, I think we should definite just if it's undefined in the Code, and add some macros to main.mac so people can easily choose something compile time.

In case there are any bugs with changing the resolution, this should help us find them now and not later.

Documentation

Documentation is lacking and/or outdated in many places. Changing that should be a priority.

User keeps walking after having finished typing

If a user is walking and types 't' to start a comment, he keeps walking as expected... but the weird part comes when after he's entered text, he keeps on going in the direction he had been going while typing and cannot regain proper control of movement until he again presses the button he had been holding when he started typing.

To recreate the bug:

Walk forward, and while doing so press 't'. Enter a chat / message / whatever it's called. The user continues to move forward. Try to move backwards, you stay put.

I think the solution is just to set the player to stop moving after entering a chat.

Debug console

Add a debug console that allows you to run Lua on client or server (separate permissions for both, I suggest console.client and console.server respectively). Could also have helper functions, such as outputting player table, etc.

Stutter on Iceball-GL

When walking on Iceball-GL I get stutter. It will go between 14-7 FPS while walking which causes me to stop and start abruptly plus I get mini freezes every once in a while.

This is not do to my graphics card I am very sure. I can run most games up to 2008 (except big name titiles like CoD and anything from Crytek) on decent graphics. I have an nVidia GeForce 6200.

JSON writer

This should theoretically be easier than the JSON parser, as instead of having to read char by char like it's nineteen-ninety-LL(1), a bit of printf() should do the trick... after discerning the types, of course.

Printing strings might be a bit tricky, as you need to deal with the escape codes, and we will almost certainly be using lua_tolstring to get them (\u0000 anyone?). Here it's probably best to read the string char-by-char, and feed the stuff into a switch statement.

We won't allow people to use a combination of numbers and strings for keys used in Lua lists. If there are numbers, it's an [ array ]. If there are strings, it's an { object }. If there are both, spew a lua_error(L, "THIS ISN'T RUBY"). If there are neither, it's an { object }, which from the Lua end is the same thing as an [ array ] so it doesn't matter - if it needs to be an [ array ], it will become an [ array ] once it has more stuff in it.

Make sure you have a tab-count variable in the json_write_object function (or whatever it's called). Yes, we will be using hard tabs, because soft tabs take up more room on the disk. Plus, soft tabs suck ass.

See http://json.org/ for more information on the syntax.

Framerate degrades over time

Shouldn't have to say much here, but I definitely noticed it during Iceball Event 2: Event Harder.

Current workaround is to just relog.

/slap /nuke /piano /wobblehead

/slap slaps players that swear, are assholes or immature, makes a noise, moves them to the side (possibly taking them out of cover/camping position/down from a high height)

/nuke throws a HK69 grenade on their position at the execution of the command that kills them and only them and destroys land around

/piano spawns a piano over them, crushing them and everyone around and playing that one awesome sad trombone sound to humiliate them

/wobblehead oversizes the player's head(incl. hitbox) and makes the face look like a crying baby

Iron sights

Add iron sights when zoomed in, either via image file or model.

Players sometimes don't leave the server

We need to do a simple check on the Lua side so that if a player hasn't sent a packet in, say, 20 seconds, it gets kicked and purged.

We're nearly there, honest!

README: sentence stops too early

Maybe this was indented:

index 0b425ff..92b296d 100644
--- a/README.txt
+++ b/README.txt
@@ -28,7 +28,7 @@ Ice Lua Components contains some content from libSDL,
   which is licensed under the LGPL version 2.1.
 It is marked accordingly.

-The manual is in the public domain, except where
+The manual is in the public domain, except where otherwise specified.

 REQUIREMENTS:
 - a C compiler that isn't crap (read: not MSVC++)

Lee-Enfield scope sway

Sway is a fairer version of spread which I think the lee-enfield should have when scoped.
See cb1dcbb.

Does anyone have a better algorithm than a plain circle?

1.0-like block placement?

Not really sure how 1.0 does it, but maybe lib_vector ln190, instead just simulate hitting a virtual box or, I don't know, will have to look into it.

Chat improvements

  • Key repeat for chat
  • Up/down arrows to cycle through messages (like in IRC/SSH)
  • Customisable font size (currently rather small)
  • Change cursor position in chat (left/right arrows)

Raw TCP socket support

Servers should be able to do TCP reads/writes to any server and any port.

Clients will need to whitelist servers/ports in clsave/config.json.

The suggested API is:

  • sockfd = common.net_tcp_connect(hostname, port)
    • Connects to a server.
    • hostname is a string used for connecting
    • Returns nil on error.
    • Returns false if hostname + port was not whitelisted.
  • common.net_tcp_close(sockfd)
    • Closes a connection.
    • DO NOT DO THIS TO A STANDARD ICEBALL CONNECTION, ONLY A RAW TCP ONE.
    • Do not do this to, e.g. stdout, either. It's stupid, and it's not even portable (but the latter point is just because Windows sucks).
  • s = common.net_tcp_recv(sockfd)
    • Reads data, nonblockingly, from a socket.
    • Returns data (as a string) from the buffer if it worked.
    • Returns an empty string if the buffer was empty.
    • Returns nil on error.
    • ONLY DO THIS TO RAW TCP SOCKETS. If you do it to a standard Iceball socket, you'll ruin the queueing.
  • s_remain = common.net_tcp_send(sockfd, s)
    • Writes data, nonblockingly, to a socket.
    • Returns what wasn't written to said socket (can be the whole string if it would block).
    • Returns nil on error.
    • ONLY DO THIS TO RAW TCP SOCKETS. If you do it to a standard Iceball socket, you'll ruin the queueing.

Crashes

Compiling iceball and trying to run the game or connect to a server causes the game to crash. GreaseMonkey has told me to recompile without the -O2 part and here is what GDB spit out:

C:\iceball>gdb iceball
GNU gdb (GDB) 7.5
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32".
For bug reporting instructions, please see:
...
Reading symbols from C:\iceball\iceball.exe...done.
(gdb) run -c aoswiki.rakiru.com 20737
Starting program: C:\iceball\iceball.exe -c aoswiki.rakiru.com 20737
[New Thread 2428.0x240]
[New Thread 2428.0x5b0]
[New Thread 2428.0x1124]
[New Thread 2428.0xdf4]
[New Thread 2428.0xf78]

Program received signal SIGSEGV, Segmentation fault.
0x77c4708c in msvcrt!memcpy () from C:\WINDOWS\system32\msvcrt.dll
(gdb) bt full
#0  0x77c4708c in msvcrt!memcpy () from C:\WINDOWS\system32\msvcrt.dll
No symbol table info available.
#1  0x0040442b in img_parse_tga (len=37110, data=0x5152ff8 "")
    at src/img.c:101
        rle = 110
        tmp_col = 4009684734
        p = 0x515cff5 "■ε■ε■ε■ε■ε■"
        dend = 0x515c0ee "\253\253\253\253\253\253\253\253ε■"
        x = 0
        y = 42
        i = 0
        head = {idlen = 254 '■', cmtype = 238 'ε', imgtype = 254 '■',
          cmoffs = 61182, cmlen = 61182, cmbpp = 254 '■', xstart = 61182,
          ystart = 510, width = 48, height = 10272, bpp = 166 'ª',
          flags = 0 '\000'}
        palette = 0x0
        img = 0x62a0020
        bplen = 21
        idx = 490962
#2  0x0040aeeb in icelua_fn_common_fetch_poll (L=0x3fa64b8)
    at src/lua_fetch.h:239
        img = 0x22ffe0
        ret = 0
#3  0x0041f6db in luaD_precall ()
No symbol table info available.
#4  0x0041faa8 in luaD_call ()
No symbol table info available.
#5  0x00417bad in lua_call ()
No symbol table info available.
#6  0x0040b21e in icelua_fn_common_fetch_block (L=0x3fa64b8)
    at src/lua_fetch.h:341
        top = 2
#7  0x0041f6db in luaD_precall ()
No symbol table info available.
#8  0x0041faa8 in luaD_call ()
No symbol table info available.
#9  0x00417bad in lua_call ()
No symbol table info available.
#10 0x0040c08c in icelua_fn_common_img_load (L=0x3fa64b8)
    at src/lua_image.h:89
        top = 1
        fname = 0x5128ad8 "pkg/base/gfx/font-numbers.tga"
        img = 0x3fa91f8
#11 0x0041f6db in luaD_precall ()
No symbol table info available.
#12 0x00423cea in luaV_execute ()
No symbol table info available.
#13 0x0041fae4 in luaD_call ()
No symbol table info available.
#14 0x00417bad in lua_call ()
No symbol table info available.
#15 0x0040b421 in icelua_fn_base_dofile (L=0x3fa64b8) at src/lua_base.h:50
        top = 1
#16 0x0041f6db in luaD_precall ()
No symbol table info available.
#17 0x00423cea in luaV_execute ()
No symbol table info available.
#18 0x0041fae4 in luaD_call ()
No symbol table info available.
#19 0x00416b48 in f_call ()
No symbol table info available.
#20 0x0041eeb1 in luaD_rawrunprotected ()
No symbol table info available.
#21 0x0041fc39 in luaD_pcall ()
No symbol table info available.
#22 0x00417c1c in lua_pcall ()
No symbol table info available.
#23 0x00410570 in icelua_initfetch () at src/lua.c:239
        i = 0
        xpath = "pkg/base/main_client.lua\000\250DÑq▐g\253q╕²\"\000µ\024@\000\00
1\000\000\000\000\000\000\000╨'\372\003.Ñ├wx\033╞wp²\"\000\221╣├w\021\000\000\00
0╕²\"\000{\031─w\001\000\000\000\240ⁿ┼wm\031─w╨'\372\003\b\000\000\000\000\000\0
00\000\021", '\000' , "\021\000\000\000\204²\"\000\020'\000"
        argct = 0
#24 0x00401c80 in update_client () at src/main.c:304
        quitflag = 0
#25 0x0040220f in run_game () at src/main.c:453
        usec_curtime = 2000
        quitflag = 0
#26 0x00402610 in SDL_main (argc=4, argv=0x3fa27d0) at src/main.c:576
No locals.
#27 0x0042bb29 in console_main (argc=4, argv=0x3fa27d0)
    at ./src/main/win32/SDL_win32_main.c:315
        n = 
        bufp = 
        appname = 
        status = -285282562
#28 0x0042bbeb in WinMain@16 (hInst=0x400000, hPrev=0x0,
    szCmdLine=0x251ef7 "-c aoswiki.rakiru.com 20737", sw=10)
    at ./src/main/win32/SDL_win32_main.c:398
        handle = 
        argv = 0x3fa27d0
        argc = 4
        cmdline = 0x3fa2538 "C:\\iceball\\iceball.exe"
        env_str = 
        bufp = 
        nLen = 
#29 0x00430f4b in main ()
No symbol table info available.
(gdb)

Basic in-engine tutorial (pkg/iceball/halp)

So I've started a very bare-bones framework for showing text with informative stuff in it.

It will eventually be expanded to be a help viewer, with categories and stuff.
client.img_blit_to might come in handy here, so not to choke everyone's comps. (the software renderer should be totally fine for this)

Hopefully this will be the "double-click default".

According to Triplefox's Iceball Enhancement Proposal (IEP) no. 1, which at the moment is the only IEP there is, there will be 3 sections for documentation.

  1. Development Manual. I think a wiki would be good for this, but at the same time, docs/*.txt would be a good place to put stuff.
  2. Gameplay Manual. This is the sole purpose of this issue.
  3. API documentation. docs/*.txt should be fine for that sort of stuff. If you're too lazy to open up a text editor, you're too lazy to develop anything. This is the stuff we actually keep up to date! (well, modding_lua.txt at least)

Anyhow, point 4.3:

The Gameplay Manual is shipped with builds and should be a single Markdown document processed into HTML, with the bare minimum necessary to get started with the client. Additional gameplay docs are best made by players, not developers.

We might skip the Markdown requirement, at least for now, although that could be useful for later on. As for emphasis, well... &eMinecraft colours, &4anyone? (It'll probably be much close to CGA colours, and I think we might go with \033 (ESC).)

Ubuntu (12.04) needed tuning for makefile for Lua

Error was:

fatal error: lua.h: No such file or directory

Fix was:

index 4ed1129..53c4a56 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,7 @@ CFLAGS = -pg -O2 -fno-strict-aliasing -g `sdl-config --cflags` -Wall -Wextra \
        -Wno-unused-variable -Wno-unused-parameter \
        -Wno-unused-but-set-variable $(CFLAGS_EXTRA) \
        -I $(INCDIR) \
+       `pkg-config --cflags lua5.1` \
        $(HEADERS_LUA)

 # Uncomment this if your are are Debian or Debian-derived
@@ -11,7 +12,7 @@ HEADERS_LUA = #-I /usr/include/lua5.1

 LDFLAGS = -pg -g $(LDFLAGS_EXTRA)
 LIBS_SDL = `sdl-config --libs`
-LIBS_Lua = -llua
+LIBS_Lua = `pkg-config --libs lua5.1`
 # Lua is not an acronym. Get used to typing it with lower case u/a.
 LIBS_zlib = -lz
 LIBS = -lm $(LIBS_Lua) $(LIBS_SDL) $(LIBS_zlib)

Server list

"When there is a serverlist I will be playing on it more often, the game is doing great all it needs is a serverlist." --Lawliet

I have a feeling that this depends on raw TCP socket support being implemented.

Oh well. I guess I'll have to shove that in. I suspect it'll be a 0.1.1 thing.

Port it across to ENet

Here's the notes I'm going to give.

Channel 0 is for Lua-visible messages - that is, the 0x40-0x7E + 0x7F group, except you just send the data as-is - no "length" field. An extra optional field will be appended to the end of the Lua packet send function, "unreliable", which when true will not mark the packet as reliable, and when false, will.
Channel 1 is for all the other stuff. All packets MUST be "reliable" which implies that they are also sequenced in order.

Both the TCP port used for what will become the "legacy" protocol (i.e. the "lags a shitload on a VPS" protocol) and the UDP port used for what will become the "enet" protocol will share the same port number.

The connection packet "data" field should contain "1CEB" in little-endian (0x42454331) because big-endian sucks.

My main concern with using ENet, however, is that I suspect ENet isn't IPv6-capable, so we MUST retain the "legacy" protocol. But while we wait for that problem to be solved, we can still get our reduced latencies.

This will probably be something I will have to do, but I might as well document what I'm thinking of just in case someone thinks my approach is utter crap.

Generating manual gives bunch of errors: IOError

Under 64-bit Ubuntu-12.04. b6f5495

python2.7 --version
Python 2.7.3

python2.7 genmanual.py 
python genmanual.py
Generating index
Generating main/changelog
Generating main/credits
Generating main/lic
Generating main/req
Generating tut/rtfm
Generating tut/cmd
Generating tut/json
ERROR: tut/json - IOError
Generating tut/compile
ERROR: tut/compile - IOError
Generating tut/play
Generating guide/where
Generating guide/config
ERROR: guide/config - IOError
Generating guide/user
ERROR: guide/user - IOError
Generating guide/controls
ERROR: guide/controls - IOError
Generating guide/args
ERROR: guide/args - IOError
Generating util/mapedit
ERROR: util/mapedit - IOError
Generating util/pmfedit
ERROR: util/pmfedit - IOError
Generating mods/conv
ERROR: mods/conv - IOError
Generating mods/network
ERROR: mods/network - IOError
Generating mods/base/preload
ERROR: mods/base/preload - IOError
Generating mods/base/lib
ERROR: mods/base/lib - IOError
Generating mods/lua/notes
ERROR: mods/lua/notes - IOError
Generating mods/lua/sect/hook
ERROR: mods/lua/sect/hook - IOError
Generating mods/lua/sect/camera
Generating mods/lua/sect/fetch
Generating mods/lua/sect/image
ERROR: mods/lua/sect/image - IOError
Generating mods/lua/sect/json
ERROR: mods/lua/sect/json - IOError
Generating mods/lua/sect/map
ERROR: mods/lua/sect/map - IOError
Generating mods/lua/sect/model
ERROR: mods/lua/sect/model - IOError
Generating mods/lua/sect/mouse
ERROR: mods/lua/sect/mouse - IOError
Generating mods/lua/sect/net
ERROR: mods/lua/sect/net - IOError
Generating mods/lua/sect/wav
ERROR: mods/lua/sect/wav - IOError
Generating fmt/vxl
ERROR: fmt/vxl - IOError
Generating fmt/icemap
ERROR: fmt/icemap - IOError
Generating fmt/tga
ERROR: fmt/tga - IOError
Generating fmt/pmf
ERROR: fmt/pmf - IOError
Generating fmt/json
ERROR: fmt/json - IOError
Generating fmt/wav
ERROR: fmt/wav - IOError

Authentication system

Allow users to log in and gain escalated privileges. My proposal for how to do this:

Groups are defined in a config, with a password and list of permission nodes, something like this:

{
    "default" : {
        "permissions" : [
            "buld",
            "snip"
        ]
    },
    "rakiru" : {
        "password" : "123456",
        "permissions" : [
            "god"
        ]
    },
    "moderator" : {
        "password" : "iceball",
        "permissions" : [
            "god",
            "kick",
            "tempban",
            "tp",
            "goto"
        ]
    },
    "admin" : {
        "password" : "Password1",
        "extends" : "moderator",
        "permissions" : [
            "ban"
        ]
    }
}

The extends concept isn't necessary straight away, if at all, but would reduce clutter and repetition.

The default group concept isn't necessary, but would give server administrators more freedom in what default users can do.

To login, a user would use the command /login admin Password1, which would then give them the permission nodes defined in the config. The command system should check if the user has the specified node to decide whether or not it should execute.

This proposal is somewhat advanced, so it doesn't necessarily dictate what the first iteration of such a system should allow, but having an end goal should make it easier to implement, rather than having to redo it all later on.

Make netcode more sensible

Right now, sending data looks like this:

common.net_send(nil, common.net_pack("BBB", 0x13, hurt_idx, hurt_part_idx))

But what is "BBB"? What is 0x13? What data is supposed to be in that packet? Why must I pack it and send it manually rather than just sending it? What's that nil parameter for? Ideally, something like this would be best:

common.net_send_hit(hurt_idx, hurt_part_idx)

but even if the magic values were replaced with enums/constants, it would make the code a lot more readable.

Customisable chat font size

Right now, the chat is rather small, making it hard to read. Being able to customise this in some way would be nice.

client.hook_kick instead of abort() on disconnect

This is really not elegant at all.

I believe it was on that 0.1 TODO list I put up on my whiteboard some time ago, which is now in the TODO list in the README.

Considering that we now have clsave/config.json working, I suppose we could work on the last few points.

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.