eezstreet / opend2 Goto Github PK
View Code? Open in Web Editor NEWA project to open source Diablo 2.
License: GNU General Public License v3.0
A project to open source Diablo 2.
License: GNU General Public License v3.0
Is there a way to port Diablo 2 to Nintendo 3ds systems ?
I think this game will run pretty good on 3ds/new 3ds hardware.
Here is a DevKit and libraries that would be useful:
At the moment I see that you need a copy of D2 to compile the current build. I currently don't own a copy of D2 and won't know when I will. Is there a point sometime soon where you won't need a copy of D2 to contribute?
I also on a Mac, could you add instructions on how to compile on Mac?
It would also be great to have an active back log, so we can see what needs to be worked on.
I'm not an experienced game developer but I'd like to help out if/when I can, for the love of D2
libD2Client.so: undefined symbol: _Z13D2Common_InitP18D2ModuleImportStrcP16D2GameConfigStrcP16OpenD2ConfigStrc
"#include <Windows.h>" appears in at least Engine/Bitmap.cpp and Engine/DCC.cpp. You cannot include the Microsoft Windows API in a project if you want it to build on Linux.
Line 46 in 065f6e4
I've never tested d2delta.mpq approach, but a 100% working method with data
folder and -direct
is to use CYR
charset. At least that's what I'm distributing for years in Russian translation of Median XL mods.
P.S. It was quite pleasant to see a piece of my own code :) https://github.com/eezstreet/OpenD2/blob/master/Engine/TBL_Text.hpp#L7
The font needs a little work. Should be a little thinner. Is D2Open using .ttf format exocet? Might need to bevel it in photoshop.
The following are things that I want to tackle before getting into the complexity of a map renderer:
Then, the next steps can be:
I want others to contribute what they think should be done to the code to make it something you're more willing to contribute to. I'll listen to any feedback, but understand that there are certain things that I am not interested in doing at this point:
Converting to another programming language is not something I want to do. I understand that not everyone is interested in writing super-verbose C/++, but I want to keep the project as close to the original game as I can get, minimize the number of dependencies that I have, and keep support for legacy systems.
Likewise, this is meant to be a self-contained project that others can learn from, so there's a lot of hand-crafted algorithms like hash maps. I originally started this project because I wanted to learn how to make my own high-performance isometric game engine, and having minimal coupling between components is ideal. If I decided later on to go the route of std::ifying or boost::ifying stuff later on in the name of performance, it's much easier to graft that kind of system onto what I have here, instead of doing it the other way around.
...plus, modern C++ looks gross, I'm sorry. :(
But here are some good things to discuss:
and data folders... (ex. "data\global\palette\ACT1\pal.dat")
Я попробовал запустить OpenD2.
вот что из этого вышло.
Translate google:
I tried to run an OpenD2.
that's what came of it.
Log: 1 - D2180405.txt
Я заметил, что в ошибке нет файла «patchstring.tbl».
я добавил «expandstring.tbl» и «string.tbl» в Patch_D2.мпк.
Вот что было дальше.
Translate google:
I noticed that there is no "patchstring.tbl" file in the error.
I added "expandstring.tbl" and "string.tbl" in "Patch_D2.mpq".
This is what happened next.
Log: D2180405.txt
You might want to be careful with making a mod like this because it seems Blizzard makes "cease-and desist" letters all the time regarding these mods.
Hello ! I'm opening an issue since I couldn't send a mail / message through twitter.
I saw this project at this very beginning and failed to follow its progress, but I now see you have a lot of stuff available.
I myself started a similar project quite some time ago https://github.com/Lectem/Worldstone, but due to lack of free time it is progressing way too slowly. I'd like to know what you think of joining efforts so that we don't end up having too many projects progressing each on its side, it seems like a waste of resources and potential to me.
If you'd like to discuss about it, I have a gitter channel where a few other people working on d2 engines roam https://gitter.im/Worldstone/Lobby. (Or we can just continue this discussion here/by mail)
While OpenD2 is at a more advanced stage than my project, I think our original goals are quite similar, though it seems OpenD2 is windows only for now ? (Don't be deceived by the few things that are actually on the Worldstone repository, I actually have decoding/rendering of sprites/tiles working and a lot more working locally, just not really cleaned up yet..)
Have a nice day !
I cannot compile newest version from master. system is Linux, OpenSUSE Leap 15. everything related to SDL is installed to compile it.
[ 43%] Built target D2Client
[ 44%] Building CXX object CMakeFiles/game.dir/Game/Audio_SDL.cpp.o
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:34:79: error: macro "Log_WarnAssertReturn" requires 2 arguments, but only 1 given
Log_WarnAssertReturn(SDL_GetNumAudioDevices(false) >= pConfig->dwAudioDevice);
^
In file included from /home/khazakar/OpenD2/Game/Diablo2.hpp:2:0,
from /home/khazakar/OpenD2/Game/Audio_SDL.hpp:2,
from /home/khazakar/OpenD2/Game/Audio_SDL.cpp:1:
/home/khazakar/OpenD2/Game/../Shared/D2Shared.hpp:691:80: warning: 'visibility' attribute ignored [-Wattributes]
typedef D2EXPORT D2ModuleExportStrc* (*GetAPIType)(D2ModuleImportStrc* pImports);
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp: In function 'void Audio_SDL::Init(OpenD2ConfigStrc*)':
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:21:72: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_SYSTEMINFO, "SDL_Mixer init...\n");
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:22:79: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_SYSTEMINFO, "Enumerate audio devices:\n");
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:26:86: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_SYSTEMINFO, "Device %d: %s\n", i, szDeviceName);
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:34:3: error: 'Log_WarnAssertReturn' was not declared in this scope
Log_WarnAssertReturn(SDL_GetNumAudioDevices(false) >= pConfig->dwAudioDevice);
^~~~~~~~~~~~~~~~~~~~
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:35:124: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_MESSAGE, "Output Device: %s\n", SDL_GetAudioDeviceName(pConfig->dwAudioDevice, false));
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:41:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Warning(__FILE__, __LINE__, "Could not open audio device.");
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:41:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
/home/khazakar/OpenD2/Game/Audio_SDL.cpp: In function 'sfx_handle Audio_SDL::RegisterSound(char*)':
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:129:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Warning(__FILE__, __LINE__, "Ran out of free sound space.");
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:129:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:143:81: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_MESSAGE, "Failed to load %s", szAudioPath);
^
In file included from /home/khazakar/OpenD2/Game/Audio_SDL.hpp:2:0,
from /home/khazakar/OpenD2/Game/Audio_SDL.cpp:1:
/home/khazakar/OpenD2/Game/Diablo2.hpp:722:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define Log_WarnAssert(x) if(!(x)) { Log::Warning(__FILE__, __LINE__, "" #x); }
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:148:3: note: in expansion of macro 'Log_WarnAssert'
Log_WarnAssert(sdlFile);
^~~~~~~~~~~~~~
/home/khazakar/OpenD2/Game/Diablo2.hpp:722:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define Log_WarnAssert(x) if(!(x)) { Log::Warning(__FILE__, __LINE__, "" #x); }
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:148:3: note: in expansion of macro 'Log_WarnAssert'
Log_WarnAssert(sdlFile);
^~~~~~~~~~~~~~
/home/khazakar/OpenD2/Game/Audio_SDL.cpp: In function 'mus_handle Audio_SDL::RegisterMusic(char*)':
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:160:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Warning(__FILE__, __LINE__, "Ran out of free sound space.");
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:160:67: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:174:81: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
Log::Print(OpenD2LogFlags::PRIORITY_MESSAGE, "Failed to load %s", szAudioPath);
^
In file included from /home/khazakar/OpenD2/Game/Audio_SDL.hpp:2:0,
from /home/khazakar/OpenD2/Game/Audio_SDL.cpp:1:
/home/khazakar/OpenD2/Game/Diablo2.hpp:722:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define Log_WarnAssert(x) if(!(x)) { Log::Warning(__FILE__, __LINE__, "" #x); }
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:179:3: note: in expansion of macro 'Log_WarnAssert'
Log_WarnAssert(sdlFile);
^~~~~~~~~~~~~~
/home/khazakar/OpenD2/Game/Diablo2.hpp:722:76: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define Log_WarnAssert(x) if(!(x)) { Log::Warning(__FILE__, __LINE__, "" #x); }
^
/home/khazakar/OpenD2/Game/Audio_SDL.cpp:179:3: note: in expansion of macro 'Log_WarnAssert'
Log_WarnAssert(sdlFile);
^~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/game.dir/build.make:76: CMakeFiles/game.dir/Game/Audio_SDL.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/game.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
The correct load order of the MPQs is this:
d2data.mpq
d2char.mpq
d2sfx.mpq
d2speech.mpq
d2music.mpq
d2video.mpq
d2delta.mpq
d2kfixup.mpq
d2exp.mpq
d2xvideo.mpq
d2xtalk.mpq
d2xmusic.mpq
patch_d2.mpq
It should be made sure that it's accurate.
[ 83%] Linking CXX executable game
/usr/bin/ld: CMakeFiles/game.dir/Game/Renderer_SDL.cpp.o: undefined reference to symbol 'SDL_CreateTexture'
/usr/bin/ld: /usr/lib/libSDL2-2.0.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/game.dir/build.make:489: game] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/game.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
This isn't the first time I've had this problem with other code bases, but, I've never seen a method to correct for this.
Pls see https://youtu.be/5nlhFKdTIR0
Is there a problem?
Elbrus is a computer with an original CPU architecture. Maybe that's the problem. I compiled the code for Elbrus.
The exception is thrown at line 1007 in Renderer_SDL.cpp, in the build pallets for loop, saying pal was nullptr. Any idea what might be causing this issue? The only slightly unusual thing I've done to the code is run it with the -w argument.
Compiled the project using Visual Studio 2017, attempted to debug and got the following error:
The application was unable to start correctly (0xc000007b). Click OK to close the application.
Using Visual Studio 15.6.2 on Windows 10 x64.
Any idea what might be going wrong?
EDIT: I had the 64-bit version of SDL_net.dll. I replaced SDL2.dll and SDL_net.dll with their 32-bit variants and the issue is gone.
Test Platform: Linux (Ubuntu 18.04)
The original code sets the x and y values to 320 and 490 respectively in the constructor of the D2Panel for creating characters dynamically, which includes the widgets NameEntry, ExpansionCheckBox and HardcoreCheckBox.
When AddWidget is called for those widgets listed above the following lines do not produce the expected behavior for the relative position of the widgets in conjunction with the code responsible for drawing a TextEntry as well as the CheckBox widget.
In AddWidget we have:
pWidget->x += x; pWidget->y += y;
If the owners position x value is set to 320, and current pWidget x position is set to 0 then pWidgets position would be 320 still which is all good, but if you look in the Draw() method of the D2Widget_TextEntry::Draw we have the following code:
engine->R_DrawText(cl.font16, szLabel, m_pOwner->x + x, m_pOwner->y + y - 15, w, 10, ALIGN_LEFT, ALIGN_BOTTOM);
As you can see it takes the owners position, in this case the 320 and adds it to widgets 320 x position and this will go off the screen and not render anything.
Possible solution, quick and dirty is to remove the x and y value assignments in the D2 dynamic Panel creation, and add the position values to the widget x y coordinates directly, or fix the actual relative position calculations in the widget draw call.
I believe all the other widgets just hardcode the relative position so none of those have these issues.
Some files, such as the Assassin and Druid animations, do not use compression within the MPQ. This is currently unsupported and will lead to errors.
no screen shot ?
is it playable ?
no much mentioned in the readme
Hi there,
I've tried to build OpenD2 project on my Fedora, and reached this:
/home/username/git/d2/OpenD2/Modcode/Common/DataTables.cpp: In function ‘int DataTables_Load(const char*, void**, D2TxtLinkStrc**, size_t)’:
/home/username/git/d2/OpenD2/Modcode/Common/DataTables.cpp:65:3: error: ‘snprintf’ was not declared in this scope
65 | snprintf(szPath, MAX_D2PATH, "%s%s.bin", D2DATATABLES_DIR, szDataTableName);
| ^~~~~~~~
/home/username/git/d2/OpenD2/Modcode/Common/DataTables.cpp:2:1: note: ‘snprintf’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
1 | #include "D2Common.hpp"
+++ |+#include <cstdio>
2 |
/home/username/git/d2/OpenD2/Modcode/Common/DataTables.cpp:76:2: error: ‘snprintf’ was not declared in this scope
76 | snprintf(szPath, MAX_D2PATH, "%s%s.txt", D2DATATABLES_DIR, szDataTableName);
| ^~~~~~~~
/home/username/git/d2/OpenD2/Modcode/Common/DataTables.cpp:76:2: note: ‘snprintf’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
make[2]: *** [CMakeFiles/D2Common.dir/build.make:135: CMakeFiles/D2Common.dir/Modcode/Common/DataTables.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:147: CMakeFiles/D2Common.dir/all] Error 2
make: *** [Makefile:104: all] Error 2
-- Check for working C compiler: /usr/bin/cc
cc (GCC) 10.2.1 20201125 (Red Hat 10.2.1-9)
-- Check for working CXX compiler: /usr/bin/c++
c++ (GCC) 10.2.1 20201125 (Red Hat 10.2.1-9)
I've tried to include cstdio
library, but had another errors.
Test Platform: Linux(Ubuntu 18.04 64bit)
Pressing ESC does not exit main menu and program,
It would be good to leave scene with VK_ESC
Do you have a compiled version for this already?
I am really curious about this project.
I noticed in the Diablo 1 reverse engineering effort, that they support "GoG's Battle.net server".
Devilution is functional over both GoG's Battle.net server and IPX using an ipx-wrapper. Additionally if
Standard.snp
from StarCraft 1.16.1 is used, local UDP play also becomes available. There are programs like ZeroTier to connect UDP globally.
I understand that using Blizzard's battle.net servers might be an issue, but perhaps the GoG's Battle.net server would be more open?
Hello All. I have set up this amazing project on my ubuntu machine and after configuring all the SDL packages I have a good compile. But when I compile... of course it says I need to specify a basepath.... my question is (and the project might not be this far along)... but I am a bit confused about how to run the game.
I have a purchased copy, and of course can download the client from Blizzard for Mac or Windows, but how does this help me with Ubuntu? Do you have to get the files onto a windows/mac machine and then copy them over to a linux directory? i.e. .mpq files and all the files from the install for things to work?
Thanks!
Couldn't there be some kind of solution where the cinematics are converted from BINK in to a free format and allowed to be played in game?
After compile i run game and get error
~/diablo$ ./game +basepath="/home/ninazu/Desktop" +logflags=16
Segmentation fault (core dumped)
Log file are empty
StackTrace
Renderer_SDL_Init(D2GameConfigStrc*, OpenD2ConfigStrc*, SDL_Window*) 0x0000555c751f269f
Renderer::Init(D2GameConfigStrc*, OpenD2ConfigStrc*, SDL_Window*) 0x0000555c751eff33
Window::InitSDL(D2GameConfigStrc*, OpenD2ConfigStrc*) 0x0000555c751f74c5
InitGame(int, char**) 0x0000555c751f7dd4
main 0x0000555c751efe95
__libc_start_main 0x00007f6257d89b97
_start 0x0000555c751e6c1a
Renderer_SDL.cpp:1000, GetPalette return nullptr
Most D2 implementations never make it this far because they get stuck on the low level stuff, networking etc. Have you guys made any headway parsing the CSVs and using them to do anything yet?
I'm looking around for anything pre-existing
OpenD2-EXEReplacement/Game/Platform_Windows.cpp:3:10: fatal error: Windows.h: No such file or directory
#include <Windows.h>
^~~~~~~~~~~
compilation terminated.
CMakeFiles/game.dir/build.make:62: recipe for target 'CMakeFiles/game.dir/Game/Platform_Windows.cpp.o' failed
make[2]: *** [CMakeFiles/game.dir/Game/Platform_Windows.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/game.dir/all' failed
make[1]: *** [CMakeFiles/game.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
Linux does not support libraries such as <Windows.h>
. I downloaded the .tar.gz
link in the latest release but it still contained windows-specific libraries. This will make it impossible to compile on linux.
Hi,
SDL2 installed:
$ rpm -ql SDL2-devel
/usr/bin/sdl2-config
/usr/include/SDL2
/usr/include/SDL2/SDL.h
/usr/include/SDL2/SDL_assert.h
/usr/include/SDL2/SDL_atomic.h
/usr/include/SDL2/SDL_audio.h
/usr/include/SDL2/SDL_bits.h
/usr/include/SDL2/SDL_blendmode.h
/usr/include/SDL2/SDL_clipboard.h
/usr/include/SDL2/SDL_config-mips64el.h
/usr/include/SDL2/SDL_config.h
/usr/include/SDL2/SDL_cpuinfo.h
/usr/include/SDL2/SDL_endian.h
/usr/include/SDL2/SDL_error.h
/usr/include/SDL2/SDL_events.h
/usr/include/SDL2/SDL_filesystem.h
/usr/include/SDL2/SDL_gamecontroller.h
/usr/include/SDL2/SDL_gesture.h
/usr/include/SDL2/SDL_haptic.h
/usr/include/SDL2/SDL_hints.h
/usr/include/SDL2/SDL_joystick.h
/usr/include/SDL2/SDL_keyboard.h
/usr/include/SDL2/SDL_keycode.h
/usr/include/SDL2/SDL_loadso.h
/usr/include/SDL2/SDL_log.h
/usr/include/SDL2/SDL_main.h
/usr/include/SDL2/SDL_messagebox.h
/usr/include/SDL2/SDL_mouse.h
/usr/include/SDL2/SDL_mutex.h
/usr/include/SDL2/SDL_name.h
/usr/include/SDL2/SDL_opengl.h
/usr/include/SDL2/SDL_opengles.h
/usr/include/SDL2/SDL_opengles2.h
/usr/include/SDL2/SDL_pixels.h
/usr/include/SDL2/SDL_platform.h
/usr/include/SDL2/SDL_power.h
/usr/include/SDL2/SDL_quit.h
/usr/include/SDL2/SDL_rect.h
/usr/include/SDL2/SDL_render.h
/usr/include/SDL2/SDL_revision.h
/usr/include/SDL2/SDL_rwops.h
/usr/include/SDL2/SDL_scancode.h
/usr/include/SDL2/SDL_shape.h
/usr/include/SDL2/SDL_stdinc.h
/usr/include/SDL2/SDL_surface.h
/usr/include/SDL2/SDL_system.h
/usr/include/SDL2/SDL_syswm.h
/usr/include/SDL2/SDL_test.h
/usr/include/SDL2/SDL_test_assert.h
/usr/include/SDL2/SDL_test_common.h
/usr/include/SDL2/SDL_test_compare.h
/usr/include/SDL2/SDL_test_crc32.h
/usr/include/SDL2/SDL_test_font.h
/usr/include/SDL2/SDL_test_fuzzer.h
/usr/include/SDL2/SDL_test_harness.h
/usr/include/SDL2/SDL_test_images.h
/usr/include/SDL2/SDL_test_log.h
/usr/include/SDL2/SDL_test_md5.h
/usr/include/SDL2/SDL_test_random.h
/usr/include/SDL2/SDL_thread.h
/usr/include/SDL2/SDL_timer.h
/usr/include/SDL2/SDL_touch.h
/usr/include/SDL2/SDL_types.h
/usr/include/SDL2/SDL_version.h
/usr/include/SDL2/SDL_video.h
/usr/include/SDL2/begin_code.h
/usr/include/SDL2/close_code.h
/usr/lib64/libSDL2.so
/usr/lib64/pkgconfig/sdl2.pc
/usr/share/aclocal/sdl2.m4
/usr/share/doc/SDL2-devel
/usr/share/doc/SDL2-devel/README.txt
/usr/share/doc/SDL2-devel/TODO.txt
/usr/share/doc/SDL2-devel/WhatsNew.txt
But failed to build:
CMake Error at CMakeLists.txt:66 (find_package):
By not providing "FindSDL2.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "SDL2", but
CMake did not find one.
Could not find a package configuration file provided by "SDL2" with any of
the following names:
SDL2Config.cmake
sdl2-config.cmake
Add the installation prefix of "SDL2" to CMAKE_PREFIX_PATH or set
"SDL2_DIR" to a directory containing one of the above files. If "SDL2"
provides a separate development package or SDK, be sure it has been
installed.
Leslie Zhai
Мне кажется проблема с отображением шрифтов кириллицы(P.S. Это то же самое что и латиница для английского).
Поправив "TBL::Register", я добился нормального возврата функции, но по прежнему без результата.
It seems to me a problem with the display of Cyrillic fonts (P.S. This is the same as Latin for English).
Correcting "TBL :: Register", I achieved a normal return of the function, but still without result.
Вот две версии перевода, которые чаще всего используют.
Here are two versions of the translation that most often use.
P.S. translate google
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.