Compare commits

..

1571 Commits

Author SHA1 Message Date
Alibek Omarov
3f81af50af engine: platform: allow querying window type through R_GetWindowHandle 2025-05-24 21:28:09 +05:00
TheEVolk
735f4e2bcb ref_api: make handle as argument and use type request input 2025-05-24 20:47:28 +05:00
TheEVolk
9ebeb520fa engine: platform: refactor R_GetWindowHandle to return a struct instead of a pointer 2025-05-24 20:47:28 +05:00
TheEVolk
dd52840a97 ref_api: update REF_API_VERSION to 10 and document R_GetWindowHandle addition 2025-05-24 20:47:28 +05:00
TheEVolk
4ce03662d9 ref_api: R_GetWindowHandle method 2025-05-24 20:47:28 +05:00
Andrey Akhmichin
20320d8dfa Documentation: not-supported-mod-list-and-reasons-why.md: update. 2025-05-24 20:45:28 +05:00
Alibek Omarov
f2ecdad5bb engine: disable clipnodes remapping for non-extended formats and QBSP2 2025-05-24 20:43:44 +05:00
Alibek Omarov
298842be32 engine: fix clipnodes limit check based on BSP version 2025-05-24 17:43:01 +05:00
Alibek Omarov
15544cde26 engine: common: fix typo in aguirRe nickname [skip ci] 2025-05-21 17:43:05 +05:00
Alibek Omarov
a4ad537e59 engine: server: minor refactoring 2025-05-20 20:24:42 +05:00
Alibek Omarov
7ba48e00bc 3rdparty: libbacktrace: sort entries in config.h to keep it the same between reconfigurations
Multicheck parallel nature caused config.h entries to be sorted randomly and
libbacktrace recompiled on every occasion.
2025-05-20 15:25:39 +05:00
Alibek Omarov
bb620d1265 engine: client: set cl_upmax to 508 by default 2025-05-20 14:35:29 +05:00
SNMetamorph
32e6f37c7e engine: server: fixed incorrect printing of IPv6 address in "status" command 2025-05-12 14:11:09 +03:00
Alibek Omarov
8f95535390 engine: server: fix a typo that prevented "status" command from executing by spawned player 2025-05-12 11:37:11 +03:00
Alibek Omarov
b2444f2480 engine: restore SDL2 include path 2025-05-11 18:01:17 +03:00
Alibek Omarov
37d6d75e69 engine: platform: sdl3: add system and input SDL3 platform implementation 2025-05-11 17:35:13 +03:00
Alibek Omarov
97bdd9dba0 engine: port occasional SDL2 calls to SDL3, no platform yet 2025-05-11 16:18:10 +03:00
Alibek Omarov
ffc8bf30d7 engine: platform: make most input platform functions optional, patch fbdev/evdev to compile 2025-05-11 16:14:36 +03:00
Alibek Omarov
8209a8a681 engine: platform: move mouse grab enabling and querying functions to SDL platform code 2025-05-11 16:09:57 +03:00
Alibek Omarov
34beb9666b engine: soundlib: drop SDL-based resampler 2025-05-11 15:27:50 +03:00
Alibek Omarov
6ccafbe297 engine: platform: move Host_Minimize_f into platform code 2025-05-11 15:24:52 +03:00
Andrey Akhmichin
a479099804 utils: mdldec: write all GoldSource-compatible motion-types with "-m" option. 2025-05-11 03:40:57 +03:00
Alibek Omarov
94791d3cb6 engine: allow downloading files that have multiple dots in filename. Also disallow everything that has nonprintable characters. 2025-05-06 21:16:06 +03:00
Alibek Omarov
6555562e78 engine: common: fix building tests 2025-05-06 21:15:28 +03:00
Alibek Omarov
de790d6f59 Revert "engine: server: increased sv_connect_timeout to a half a minute"
This reverts commit 3fca1bb4d5.
2025-05-06 20:22:20 +03:00
Alibek Omarov
cff0df60a9 engine: server: also bump timeouts for connected clients during changelevel in server activation 2025-05-06 20:19:17 +03:00
Alibek Omarov
c8b8e19ed3 engine: server: fix time out on change level 2025-05-06 20:11:41 +03:00
Alibek Omarov
2106556dec engine: server: limit status and build info commands only to spawned clients 2025-05-06 19:50:51 +03:00
Alibek Omarov
7221bd6049 engine: server: small refactoring 2025-05-06 19:50:26 +03:00
Alibek Omarov
ded38020d3 engine: server: add new client state cs_spawning, to ensure that client cannot spawn before it has an entity 2025-05-06 19:37:54 +03:00
Alibek Omarov
c6251174df engine: server: don't let unspawned player execute ent tools commands or send voice data 2025-05-06 19:02:32 +03:00
Alibek Omarov
177c132969 engine: common: fix incorrect argument name, which also fixes build with compilers that enforce C23 2025-05-06 19:00:18 +03:00
Alibek Omarov
3fca1bb4d5 engine: server: increased sv_connect_timeout to a half a minute 2025-05-06 16:28:29 +03:00
Alibek Omarov
321e28c810 scripts: waifulib: sdl2: fix SDL3 sanity test 2025-05-05 18:51:01 +03:00
Alibek Omarov
7fda58561f engine: platform: sdl2: remove SDL1.2 code, as it's now moved into it's own separate directory 2025-05-05 05:56:23 +03:00
Alibek Omarov
0cbb62b329 engine: platform: try to restore SDL1.2 support (only ref_soft is tested, ref_gl doesn't work) 2025-05-05 05:44:31 +03:00
Alibek Omarov
aa2e5eb3cc engine: platform: move SDL2 support code into sdl2 subdirectory. Change XASH_SDL macro value from 12 to 1 for SDL1.2 2025-05-05 05:15:10 +03:00
Alibek Omarov
3d26ba1ed8 engine: client: always pass a valid pointer to usercmd_t in ref_params_t to prevent crassh when client.dll reads them during demo playback 2025-05-05 03:40:18 +03:00
Alibek Omarov
47c4844024 engine: platform: sdl: enable building with SDL as old as 2.0.8, it should satisfy everybody masturbating to old software 2025-04-30 17:45:05 +03:00
Alibek Omarov
d457d7d093 filesystem: archive mounting refactoring 2025-04-28 22:28:30 +03:00
Vladimir
43364ec2e9 defaults: enable touch for psvita & nswitch (#2143) 2025-04-27 14:39:58 +03:00
Alibek Omarov
14127c26f5 scripts: gha: don't put dedicated binary in full client tarballs 2025-04-24 23:41:26 +03:00
Alibek Omarov
291f24a611 scripts: cirrus: build dedicated server alongside full client for slightly faster builds 2025-04-24 23:33:59 +03:00
Alibek Omarov
1abb16638f scripts: gha: build dedicated server alongside full client for slightly faster builds 2025-04-24 23:33:59 +03:00
Alibek Omarov
3e41e389c5 engine: lib_common: do not take generic GNU/Linux rules for library naming on Android 2025-04-24 21:53:03 +03:00
Alibek Omarov
5aca143eba engine: disable Android-specific library loader under Termux 2025-04-24 21:46:43 +03:00
Alibek Omarov
60fa855d47 filesystem: wscript: strip lib prefix on Termux too 2025-04-24 21:42:20 +03:00
Alibek Omarov
22661fd446 public: define XASH_TERMUX if __TERMUX__ is defined. Do not enable XASH_MOBILE_PLATFORM for it 2025-04-24 21:40:35 +03:00
Alibek Omarov
61d8d5e12b wscript: detect if we're compiling from Termux 2025-04-24 21:39:46 +03:00
Alibek Omarov
a7f3c04baa engine: platform: android: hide SDL calls under XASH_SDL macro 2025-04-24 21:39:46 +03:00
Alibek Omarov
296e642f09 wscript: look for libm when compiling for Android on Android device itself (e.g. Termux) 2025-04-24 20:52:55 +03:00
Alibek Omarov
75eb1f1e8b filesystem: android: make failing to find JNI env non-fatal 2025-04-24 20:52:18 +03:00
Alibek Omarov
8f4a45baaa engine: platform: win32: set IMAGEHLP_LINE64 structure size as required in dbghelp docs on MSDN 2025-04-21 20:33:30 +03:00
Alibek Omarov
18aac5fd3d readme: update 2025-04-21 20:12:55 +03:00
Alibek Omarov
ca6ca8450b engine: platform: sdl: load .ico file with wide function allowing for icons to be loaded from non-latin game directory 2025-04-21 20:09:39 +03:00
Alibek Omarov
6ecaea3102 engine: system: convert Windows username to utf8 2025-04-21 19:56:49 +03:00
Alibek Omarov
fa47ca0d2d engine: system: make a copy of pw_name just in case 2025-04-21 19:56:23 +03:00
Alibek Omarov
8ce3b4ac93 engine: client: identification: use wide CreateProcess call, ensure that process terminated and it's handles are closed 2025-04-21 19:38:10 +03:00
Alibek Omarov
a7ba705277 engine: platform: win32: make output similar to libbacktrace-based crashhandler, general improvements and refactoring 2025-04-21 18:54:39 +03:00
Alibek Omarov
85a4d296f5 Documentation: not-supported-mod-list-and-reasons-why: clarify that we don't know why Arrange Mod doesn't work on Xash yet [skip ci] 2025-04-21 17:06:11 +03:00
Andrey Akhmichin
4dd8d89459 Documentation: not-supported-mod-list-and-reasons-why.md: update [skip ci] 2025-04-21 17:04:19 +03:00
Alibek Omarov
c564cc96c7 engine: get rid of host.crashed field, as it's a complete duplicate of host.status 2025-04-21 16:59:44 +03:00
Alibek Omarov
0e54200f34 engine: platform: win32: move saving minidumps before showing stacktrace messagebox 2025-04-21 16:58:43 +03:00
Alibek Omarov
fa75c33390 engine: platform: win32: do not set parent window for stacktrace print window 2025-04-21 16:57:27 +03:00
Alibek Omarov
36cb3b2d89 engine: fix incompatible int size when casting pointer to int 2025-04-21 15:54:32 +03:00
Andrey Akhmichin
2f3b03d27a Documentation: opensource-mods.md: add "Counter-Life". 2025-04-20 10:23:53 +03:00
SNMetamorph
f0deac206b Documentation: added initial revision of touch controls configuring guide
Thanks to VladislavKZ and archer for helping with information gathering.
2025-04-18 17:24:44 +03:00
Alibek Omarov
5d0e473cf1 3rdparty: maintui: update 2025-04-16 14:52:46 +03:00
Alibek Omarov
2174fe6d21 ci: update to ubuntu-22.04 2025-04-15 21:04:48 +03:00
Alibek Omarov
5d1e207337 3rdparty: maintui: update 2025-04-15 21:00:38 +03:00
Alibek Omarov
87c209f1f9 engine: server: drop clients that do not continue connecting after smaller timeout 2025-04-15 20:54:27 +03:00
SNMetamorph
ed5ea002d7 Documentation: donate: updated details, changed layout 2025-04-15 18:07:59 +03:00
Alibek Omarov
149593fea5 engine: server: hide Cmd_ForwardToServer call under XASH_DEDICATED just in case, fixes build with debug 2025-04-11 00:34:10 +03:00
Alibek Omarov
8c0f1d65ba 3rdparty: maintui: update 2025-04-10 23:56:55 +03:00
Alibek Omarov
bbf6f1c7b8 scripts: gha: fix generating sources.list on different ubuntu version 2025-04-10 23:37:36 +03:00
Alibek Omarov
3b61e0bbd6 ci: thanks github, ubuntu-latest isn't actually latest 2025-04-10 23:07:39 +03:00
Alibek Omarov
8d2986bc74 3rdparty: maintui: update 2025-04-10 23:02:48 +03:00
Alibek Omarov
27a8adad22 ci: compile risc-v port on ubuntu-latest for newer compilers 2025-04-10 22:48:41 +03:00
Alibek Omarov
64e774377b scripts: gha: fix ppc64el rust target 2025-04-10 22:48:17 +03:00
Alibek Omarov
8ff469d466 3rdparty: maintui: update 2025-04-10 22:26:13 +03:00
Alibek Omarov
a20e961892 scripts: gha: install i686-pc-windows-msvc rust target for cross-compiling 32-bit maintui 2025-04-10 22:02:13 +03:00
Alibek Omarov
8ba30a1c09 scripts: gha: add Rust target for crosscompiling 2025-04-10 20:01:03 +03:00
Alibek Omarov
d570d6d6da scripts: gha: enable building maintui on supported platforms (win32, linux and apple) 2025-04-10 19:21:09 +03:00
Alibek Omarov
882b573e70 wscript: build maintui alongside mainui_cpp, so both could be used and shipped 2025-04-10 19:21:09 +03:00
Andrey Akhmichin
54657c149b utils: mdldec: use separate options for sequences and textures. 2025-04-10 14:57:11 +05:00
Alibek Omarov
9054b11ebd engine: client: let loading custom menu dll with -menulib command line switch 2025-04-09 17:35:36 +03:00
Alibek Omarov
71d31330f9 filesystem: dir: fix possible null dereference 2025-04-05 14:03:24 +05:00
SNMetamorph
ea29699633 scripts: gha: psvita: pinned cmake version to 3.28.3 2025-04-05 12:45:45 +05:00
Andrey Akhmichin
ccb8d611c6 public: add getopt implementation from NetBSD libc. 2025-04-02 12:07:41 +03:00
Andrey Akhmichin
f4d98c056e utils: mdldec: handle unknown options. 2025-04-02 12:07:41 +03:00
Andrey Akhmichin
779adcd838 utils: mdldec: bump version to 1.2. 2025-04-02 12:07:41 +03:00
Andrey Akhmichin
16e2ce0aeb utils: mdldec: avoid brackets. 2025-04-02 12:07:41 +03:00
Andrey Akhmichin
7bfcd4cef0 utils: mdldec: add options to:
- disable log output.
 - use separate directories for smd and texture files.
 - avoid to write paranoia 2 motion types.
 - ignore filesize checks.
 - enable UV coords shifting.
 - show decompiler version.
 - show help.
2025-04-02 12:07:41 +03:00
Andrey Akhmichin
c298635728 utils: mdldec: Makefile: update. 2025-04-02 12:07:41 +03:00
Andrey Akhmichin
92e976952e utils: mdldec: fix UV coords shifting yet again. 2025-04-02 12:07:41 +03:00
Denis Drakhnia
a85bd0c864 maintui: first blood 2025-04-01 14:46:27 +03:00
Alibek Omarov
0a5f175431 mainui: update 2025-03-31 19:18:39 +03:00
Alibek Omarov
da6402ccc2 common: xash3d_types: disable PFN_RETURNS_NONNULL attribute for MCST lcc 2025-03-31 19:14:22 +03:00
Alibek Omarov
9d1b03d119 scripts: gha: build for e2k-8c on GitHub Actions machines 2025-03-31 19:07:47 +03:00
Alibek Omarov
6cf0d7a871 scripts: gha: linux: fix enabling stb_truetype in mainui_cpp 2025-03-31 18:20:23 +03:00
SNMetamorph
d5a6a7ae60 scripts: gha: made voice chat enabled by default for PS Vita platform 2025-03-30 20:24:38 +03:00
SNMetamorph
185374f99f engine: platform: psvita: explicitly exported symbol rintf
This is required for cs16client port for PS Vita.
2025-03-30 20:24:38 +03:00
SNMetamorph
b9072e4642 Documentation: slightly updated PS Vita port installation instructions 2025-03-30 20:24:38 +03:00
yumirak
06e5895d7a engine: client: fix TE_BLOODSPRITE behaviour to GoldSrc 2025-03-26 22:00:10 +03:00
Alibek Omarov
ac5be8156b Revert "wscript: force -Wuninitialized to error"
This reverts commit e615ff0e7f.
2025-03-25 19:10:13 +03:00
Alibek Omarov
8c12a8baed mainui: update 2025-03-25 19:02:00 +03:00
Alibek Omarov
e615ff0e7f wscript: force -Wuninitialized to error 2025-03-25 17:11:51 +03:00
Alibek Omarov
2e8fa60e96 engine: client: don't allow downscaling HUD when using hud_scale's fixed resolution mode 2025-03-25 17:07:05 +03:00
Alibek Omarov
a8ba9124dd engine: server: fix -Wmaybe-uninitialized 2025-03-25 17:07:05 +03:00
Alibek Omarov
f6e8a68b22 engine: imagelib: img_png: fix -Wmaybe-uninitialized 2025-03-25 17:07:05 +03:00
Alibek Omarov
706cc16a86 ref: fix -Wmaybe-uninitialized 2025-03-25 17:06:59 +03:00
Alibek Omarov
a9fd508e47 engine: common: fix reading maybe uninitialized crt_tm variable 2025-03-25 17:04:35 +03:00
Alibek Omarov
90bd72d481 ref: gl: disable blend after we're done drawing sprite "lightmap"
Fixes translucent brush model on renderfx2.bsp (https://twhl.info/vault/view/6933)
which so happened to draw after agrunt sprite, that has "lightmap" enabled
2025-03-25 00:52:11 +03:00
Alibek Omarov
a2a3978de7 engine: server: fix erasing physinfo on client connect, when it was already set by game logic on save restore
Fixes issue when player loses long-jump in Half-Life on save load or level transition.
2025-03-24 23:22:19 +03:00
Andrey Akhmichin
ea70989fd2 utils: mdldec: Fix resource names validity checks. 2025-03-24 01:24:31 +03:00
Andrey Akhmichin
091228bcb3 Documentation: supported-mod-list.md: update. 2025-03-24 01:24:25 +03:00
Alibek Omarov
9c49253388 filesystem: allow symlinks when using listdirectory with dirs_only = true
Should fix special setups when game directories are actually symlinks
2025-03-20 20:31:44 +03:00
Alibek Omarov
eea804a4bf engine: server: improve server op status command output 2025-03-20 05:47:24 +03:00
Alibek Omarov
ecbfdb82f4 engine: server: add requested server command status. Only expose client input devices for now, as everything else might be considered sensitive information 2025-03-20 05:46:49 +03:00
Alibek Omarov
a1950ec7b0 engine: server: tiny refactoring, make SV_CalcPing pointer to client const 2025-03-20 05:44:23 +03:00
Alibek Omarov
6b56e13b60 engine: make local ipv4 address private to net_ws, acquire local addresses with GetLocalAddress function 2025-03-20 05:39:02 +03:00
Alibek Omarov
d93bee0cbc engine: minor refactoring, rename ref_state_t fields to snake case, rename readable names to shorter (no pun intended) long names 2025-03-20 03:11:17 +03:00
Alibek Omarov
5009db6aac engine: client: make renderer loading failure less scary for the user 2025-03-20 03:06:05 +03:00
Alibek Omarov
c389736c2f android: do not crash on Browse button if activity wasn't found 2025-03-20 02:44:37 +03:00
Alibek Omarov
66bdca63ee ref: gl: upload skybox texture object with >= 5800 name only with GL compatibility context, it's not needed on GLES 2025-03-17 08:32:06 +03:00
SNMetamorph
d3f455649e engine: client: implemented xashid for PS Vita platform 2025-03-16 21:34:32 +03:00
SNMetamorph
17ff80d85d engine: platform: psvita: implemented function for getting PSID 2025-03-16 21:34:32 +03:00
SNMetamorph
407d0aa291 engine: wscript: enabled linking library SceLibKernel_stub on PS Vita 2025-03-16 21:34:32 +03:00
Alibek Omarov
d13429a287 game_launch: explicitly call wide or ascii Win32 API function calls 2025-03-16 20:41:57 +03:00
Alibek Omarov
a84204fc75 engine: partial fix to explicitly call ascii or wide Win32 API function calls 2025-03-16 20:41:57 +03:00
SNMetamorph
292ace2d26 engine: client: fixed SQB in CL_ParseEvent & CL_ParseReliableEvent 2025-03-16 20:31:14 +03:00
Alibek Omarov
68a1fbdc2b engine: platform: win32: use widechar versions of LoadLibrary, which fixes loading engine if path contains non-latin characters 2025-03-16 03:16:02 +03:00
Alibek Omarov
d68f29737a public: crtlib: use Q_rint instead of round in Q_pretifymem, so we don't have to link libm when we don't need it 2025-03-16 01:01:13 +03:00
Alibek Omarov
a34edbd8e8 wscript: ok, let's disable format-nonliteral for now 2025-03-15 20:01:47 +03:00
Alibek Omarov
71e2d4ecd4 engine: client: fix another case of format-nonliteral 2025-03-15 19:52:24 +03:00
Alibek Omarov
25656b532a engine: platform: posix: fix a typo 2025-03-15 19:52:00 +03:00
Alibek Omarov
1a791e8556 engine: soundlib: get rid of useless formatstring, which is always the same for all types 2025-03-15 19:36:34 +03:00
Alibek Omarov
ccd31c6b27 engine: imagelib: get rid of useless formatstring, which is always the same for all types 2025-03-15 19:29:11 +03:00
Alibek Omarov
6aeedf201c ref: gl: update dlight texture in case if BLOCK_SIZE changes between maps (going from QBSP to BSP2 or toggling r_large_lightmaps cvar) 2025-03-15 19:23:49 +03:00
Alibek Omarov
c9f8bdfcb0 ref: gl: allow updating texture with NULL data by calling TexImage instead of TexSubImage 2025-03-15 19:20:36 +03:00
Alibek Omarov
3cf4901ad2 engine: fix another case of format-nonliteral 2025-03-15 18:23:38 +03:00
Alibek Omarov
92de3ebc58 wscript: disable format-nonliteral for Clang, it's buggy there 2025-03-15 14:20:11 +03:00
Alibek Omarov
7aa9f23590 public: crtlib: fix Q_pretifymem so it compiles with -Wformat-nonliteral 2025-03-15 14:19:47 +03:00
Alibek Omarov
3d999269eb engine: net_ws: make net6_local global static, as it's not used outside of this translation unit 2025-03-15 01:24:59 +03:00
Alibek Omarov
1e8e4825fa engine: fix remaining -Wformat=2 and force it to -Werror 2025-03-15 01:24:59 +03:00
Alibek Omarov
91bc372811 mainui: update 2025-03-15 01:24:59 +03:00
Alibek Omarov
f9df96d70e engine: server: fix server strings deduplication on 64-bit systems 2025-03-15 01:24:59 +03:00
Alibek Omarov
8af0e2c8b4 readme: add missing system dependencies on Linux systems [skip ci] 2025-03-08 02:42:28 +03:00
Alibek Omarov
a5191d8948 engine: client: console: simplify Field_DrawInputLine, try to make it safer 2025-03-08 02:35:32 +03:00
Alibek Omarov
b2d8239829 engine: common: net_http: fix decompression for compressed but not chunked files 2025-03-06 19:10:48 +03:00
Alibek Omarov
34322f025b engine: client: limit ticket generator choices to revemu2013 only 2025-03-06 12:35:32 +03:00
Alibek Omarov
3e6b434733 mainui: update 2025-03-05 22:36:41 +03:00
Alibek Omarov
8359cbe76c scripts: waifulib: add flag --enable-limited-debuginfo which enables -gline-tables-only on GCC and Clang compilers
This saves ~30mb of APK size on Android.
2025-03-05 02:19:39 +03:00
Alibek Omarov
0e90e6285e engine: host: use #if instead of #ifdef when checking for extended hl25 structs compile option 2025-03-03 22:59:44 +03:00
Alibek Omarov
2f5840f650 engine: host: add a cvar that indicates whether engine was built with --enable-hl25-extended-structs or not 2025-03-03 22:53:20 +03:00
Alibek Omarov
3b51a554dd mainui: update 2025-03-02 20:20:54 +03:00
Alibek Omarov
5f0880d4a2 engine: client: lower the bandwidth test fragment sizes to 1400 and less, as using 64k, 32k and more is unreliable 2025-03-02 20:20:40 +03:00
Bohdan Shulyar
884a3c66ac client: touch: fix minor typo that prevented editing touch buttons commands 2025-03-02 20:19:58 +03:00
Alibek Omarov
c76752cc5f engine: server: validate uuid in protinfo, it's an md5 string 2025-03-01 22:45:01 +03:00
Alibek Omarov
fc2888e107 engine: server: fix incorrect ID string generation, hashedcdkey is already an MD5 string 2025-03-01 22:27:22 +03:00
Alibek Omarov
674b4c1506 engine: server: reorder sv_client_t struct for better memory efficiency, remove unused fields 2025-03-01 22:07:05 +03:00
Alibek Omarov
cddd50f1e9 engine: server: completely erase sv_client_t on client connect, so we always start from scratch for every user 2025-03-01 22:07:05 +03:00
Alibek Omarov
6c9d5bc1fb engine: server: cleanup penalties and warns for new players 2025-03-01 16:03:39 +03:00
Alibek Omarov
ec23860238 gitmodules: use github mirrors instead of xiph.org's git
It's not really a good idea to hammer upstream git servers with cloning same
data over and over. Besides, it's down right now.
2025-03-01 15:28:55 +03:00
Alibek Omarov
14a2e34b7e mainui: update 2025-03-01 15:21:20 +03:00
Alibek Omarov
29c8818557 engine: server: do not continue processing command if the player was kicked during it (for example, by speedhack prevention) 2025-03-01 14:58:15 +03:00
Andrey Akhmichin
7222830b28 Documentation: supported-mod-list.md: a little remark. 2025-02-28 23:56:28 +03:00
Alibek Omarov
9b0ad7daf0 engine: common: register forgotten net_clockwindow cvar 2025-02-28 22:44:44 +03:00
Alibek Omarov
73729827f4 engine: platform: win32: add forgotten SDL.h include 2025-02-28 21:55:26 +03:00
Alibek Omarov
97fa395a3b engine: platform: win32: fix build by restoring previous win32 header inclusion order 2025-02-28 21:44:22 +03:00
Alibek Omarov
1cef8ea7af Revert "ref: gl: check OES NPOT texture extension in BigGL mode"
This breaks mipmaps on PSVita

This reverts commit 54b0cf9991.
2025-02-28 17:08:27 +03:00
Alibek Omarov
eda4e95607 engine: client: draw version at bottom right in menu, regardless if dev_overview or net_graph are enabled (those only used in-game) 2025-02-28 15:11:24 +03:00
Alibek Omarov
a5f0ca38f1 engine: remove inclusion of SDL headers globally, helps to cleanup code before SDL3 migration 2025-02-28 13:14:47 +03:00
Alibek Omarov
bbbd7711c1 engine: platform: cleanup remnants of disabling vsync while loading mechanism for linux fbdev and dos ports 2025-02-28 12:33:30 +03:00
Alibek Omarov
38e922557d engine: platform: sdl: remove disabling vsync while we're not in game, as this is something users have been complaining a lot
It's not a big deal if level loading will take a few milliseconds more.
2025-02-28 08:27:38 +03:00
Alibek Omarov
4dec1785ed engine: client: touch: fix inverted file extension check 2025-02-28 06:44:21 +03:00
Alibek Omarov
9f77b7dc46 scripts: waifulib: enable HLSDK -mtune only on GCC and Clang, and not on Android 2025-02-26 17:11:10 +03:00
Alibek Omarov
5061a29f86 scripts: waifulib: enable asynchronous-unwind-tables for better stacktraces 2025-02-26 17:10:30 +03:00
Alibek Omarov
cb5dffd554 engine: server: don't bother printing about unsupported connectionless packets if sv_log_outofband is set to 0 2025-02-26 17:06:33 +03:00
Alibek Omarov
4eaa8ab40f android: bump minimum CMake version, so disabling unneeded features in SDL actually works 2025-02-26 14:21:58 +03:00
Alibek Omarov
2a82d265d6 scripts: waifulib: xcompile: add support for Android NDK r27 as well 2025-02-26 12:40:22 +03:00
Alibek Omarov
f2392b5709 scripts: waifulib: xcompile: add support for building on Windows. Drop using shortcut target clang symlinks, as those don't work on Windows at all (they are wrapped into batch files, which can't be invoked like exes) 2025-02-26 12:40:22 +03:00
Alibek Omarov
5620e7ab4c android: fixup CMAKE_LIBRARY_OUTPUT_DIRECTORY on Win32, merge stdout and stderr for waf output 2025-02-26 12:40:22 +03:00
Alibek Omarov
a76236ac5a scripts: waifulib: xcompile: add support for NDK 28, remove setting up custom PREFIX to not mess up installation path 2025-02-26 12:40:22 +03:00
Alibek Omarov
d1c5862bab android: bump NDK version to 28 2025-02-26 12:40:22 +03:00
Alibek Omarov
81400d0b01 android: use xcompile.py's support for Android NDK, fix tabs 2025-02-26 12:40:22 +03:00
Alibek Omarov
a129f13e25 android: enable verbose output for CMake running from Gradle 2025-02-26 12:40:22 +03:00
Alibek Omarov
ec8b4c0a84 android: rework how engine is built, instead of generating CMakeLists, just use included in CMake ExternalProject feature 2025-02-26 12:40:22 +03:00
Alibek Omarov
f1f726822c engine: client: restore cl_cmdrate default value at 30. It wasn't an intentional change. 2025-02-25 19:52:48 +03:00
Alibek Omarov
8982d55392 engine: client: set default rate value to 25000
3500 is barely playable these days. Those who have worse than usual internet
connection, should set appropriate value themselves.
2025-02-25 17:36:43 +03:00
Alibek Omarov
f499286a87 engine: platform: sdl: don't call SDL_GL_SetSwapInterval each frame while we're not in game 2025-02-25 11:52:03 +03:00
Alibek Omarov
a3aaa87147 ref: gl: enable polygon offset for fullbright textures when rendering them in separate from VBO pass 2025-02-25 11:49:31 +03:00
Alibek Omarov
15a6971aca engine: platform: posix: strip path from filename in backtrace 2025-02-25 11:46:57 +03:00
Alibek Omarov
b1eb3390e3 engine: server: let server dll to register it's own showtriggers cvar 2025-02-24 06:41:11 +03:00
Alibek Omarov
74ad504377 engine: client: console: do not let color strings contribute to line length in console 2025-02-24 03:55:13 +03:00
Alibek Omarov
8a0c2577ed engine: platform: sdl: exclude fake game controller found on Android emulator 2025-02-24 03:42:03 +03:00
Alibek Omarov
a060d7aefd wscript: disable large file for 32-bit Android 2025-02-23 16:07:51 +03:00
Alibek Omarov
ccf342f4fe engine: client: fix inconsistent mouse state caused by mis-use of touch_emulate by cs16-client 2025-02-23 07:13:39 +03:00
Alibek Omarov
8b9a40ff1f engine: client: completely refactor touch code, protect button color, improve config output 2025-02-23 07:00:20 +03:00
Alibek Omarov
425cc61c4c engine: client: handle K_ESCAPE in Key_Console, remove special case for it in Key_Event 2025-02-23 06:47:44 +03:00
Alibek Omarov
fe1fd5b024 engine: client: make color array of DrawString functions const 2025-02-23 06:46:22 +03:00
Alibek Omarov
0c8da36a0b filesystem: disallow path traversal in FS_Delete and FS_Rename 2025-02-23 03:13:46 +03:00
Alibek Omarov
2c5030ab45 engine: client: do not save touch_emulate cvar 2025-02-23 02:04:33 +03:00
Alibek Omarov
9decba873b engine: platform: sdl: try to save and restore mouse position during showing or hiding cursor 2025-02-23 02:04:03 +03:00
Alibek Omarov
bda4c45504 engine: client: simplify CL_EDICT_NUM and it's sister, non throwing error, function CL_GetEntityByIndex 2025-02-23 01:51:05 +03:00
Alibek Omarov
f7aa8a0c90 ci: bump SDL2 to 2.32.0. This is the last major upgrade to SDL2 dependency, we should migrate to SDL3 (with sdl2-compat for GoldSrc mods) after that 2025-02-22 18:48:41 +03:00
Alibek Omarov
4c15cceb32 engine: client: deprecate custom id, it is not used meaningfully by anyone 2025-02-20 15:41:17 +03:00
Alibek Omarov
3e4c5beb25 ref: fix another typo made after R_StudioCalcBones refactor 2025-02-18 19:22:06 +03:00
Alibek Omarov
f84d865f4a engine: client: fix crash if server sends new movevars before entities were created
Nothing bad will happen if we skip wave height for world entity for now, but
we might need to handle this situation somehow in the future.
2025-02-17 13:02:21 +03:00
SNMetamorph
2465782a3e engine: platform: sys_win: fixed compiling error 2025-02-15 13:45:22 +03:00
Alibek Omarov
7ba2209124 engine: platform: sdl: set requested timer delay in units of 100ns according to the documentation 2025-02-15 13:08:05 +03:00
Alibek Omarov
af6b434b71 engine: platform: win32: implement nanosleep using waitable timers with high precision 2025-02-15 11:57:41 +03:00
Alibek Omarov
052ea6a8bd engine: platform: introduce for Platform_NanoSleep, to be used for better sleeping in between frames for lowering CPU usage 2025-02-15 10:11:17 +03:00
Alibek Omarov
448dc720ed engine: server: immediately exit from SV_GetChallenge on unknown type addresses 2025-02-15 09:31:20 +03:00
Alibek Omarov
75b15696f8 engine: zone: ensure memheader_t size is always expected 2025-02-15 09:31:20 +03:00
Andrey Akhmichin
7fb113f610 Documentation: opensource-mods.md: add "Delta Particles". 2025-02-15 08:02:44 +03:00
Andrey Akhmichin
0497e00ad2 Documentation: supported-mod-list.md: update. 2025-02-15 08:02:35 +03:00
Alibek Omarov
9c50288bbb engine: server: rewrite challenge generator to something more simple: salted MD5 of an IP address
The idea was taken from ReHLDS project.
2025-02-15 08:01:44 +03:00
Alibek Omarov
c5d4af802c engine: server: even if user set non-integer value for cl_updaterate, clamp it to sv_minupdaterate 2025-02-15 08:01:44 +03:00
Alibek Omarov
340a8b5e0c engine: server: fixes for userinfo change ratelimiting
* Add pentalty earlier
* Increase disallowed timewindow according to penality multiplier
* Allow first change even if it falls into ignore timewindow
2025-02-15 08:01:44 +03:00
Alibek Omarov
bc1b86c19c engine: server: refactor SV_ConnectClient, simplify LAN IP check 2025-02-15 08:01:44 +03:00
Alibek Omarov
b605cf603e common: xash3d_types: make it more compatible for inclusion in SDK 2025-02-15 08:01:44 +03:00
xiaodo
fdc2ed8093 engine: server: pfnClientCommand and pfnQueryClientCvarValue should execute on unspawned player 2025-02-14 20:52:45 +03:00
xiaodo
a27375d1f5 engine: server: cmds: fix kick command incorrect argc 2025-02-14 20:52:45 +03:00
Alibek Omarov
0e2abf9040 engine: platform: always create zeroed buffer for audio 2025-02-14 05:20:40 +03:00
Alibek Omarov
89430400d9 engine: sys_con: only allow names that start with either alphabetic or numerical character for a log file 2025-02-14 01:51:50 +03:00
Alibek Omarov
f1a9d408bf engine: sys_con: check if the next argument after -log starts with minus and ignore it if it does 2025-02-14 00:50:01 +03:00
Alibek Omarov
6529692244 engine: disable timestamps in log file by default, allow changing log file name with -log argument 2025-02-14 00:28:00 +03:00
Alibek Omarov
51d11f8e86 engine: platform: win32: remove unused log variables and checks from Win32 console, sys_con does the job 2025-02-14 00:28:00 +03:00
Alibek Omarov
c5397191e5 engine: client: touch: limit usage of touch_set_stroke and touch_setclientonly only for privileged mode 2025-02-13 20:55:49 +03:00
Alibek Omarov
44426709f7 engine: platform: posix: skip first stack frame when printing stack trace with libbacktrace 2025-02-13 20:43:32 +03:00
Alibek Omarov
2d8f747e84 wscript: disable using system-wide libbacktrace, as it might not support features we need 2025-02-13 19:21:07 +03:00
Alibek Omarov
0dd5a60410 3rdparty: gl4es: update submodule 2025-02-13 02:32:28 +03:00
Alibek Omarov
eec8129be4 3rdparty: extras: update submodule 2025-02-13 02:31:30 +03:00
Alibek Omarov
934c5e018d readme: clarify that chat is for russian speaking people [ci skip] 2025-02-12 18:08:10 +03:00
Alibek Omarov
d658d8cc78 readme: remove builds.sr.ht status, add Telegram chat link, remove stable build link (it's very outdated and not recommended to use) [skip ci] 2025-02-12 17:58:51 +03:00
Alibek Omarov
ca9a3f0491 engine: server: fix out of bounds write in SV_FindTouchedLeafs 2025-02-11 21:15:54 +03:00
Alibek Omarov
1510cb458f public: fix another typo 2025-02-11 21:12:50 +03:00
Andrey Akhmichin
30cabb8107 Documentation: supported-mod-list.md: fix branch name. 2025-02-11 21:10:59 +03:00
Alibek Omarov
64ee956618 engine: fix a typo 2025-02-11 20:06:15 +03:00
Alibek Omarov
39659644bf public: merge calc bone quaternion and position into single function
Expect that only adj and output quaternion can be NULL.
2025-02-11 18:57:08 +03:00
Alibek Omarov
eb09af0b08 ref: gl: avoid generating GL_INVALID_OPERATION if gl_vbo_dlightmode is set to 0 2025-02-11 18:57:08 +03:00
Andrey Akhmichin
91a4ace12c Documentation: supported-mod-list.md: update. 2025-02-11 16:28:40 +03:00
Alibek Omarov
2ad2e46b30 mainui: update 2025-02-10 13:18:59 +03:00
Alibek Omarov
627444279f Revert "common: cvar: make auto descriptions private to cvar subsystem, use them when Cvar_Get is called with NULL description"
This reverts commit ade560c601.
2025-02-10 12:49:05 +03:00
Alibek Omarov
3550bdb30d 3rdparty: mainui: update 2025-02-09 23:14:24 +03:00
Alibek Omarov
c201b895eb common: netadr: force cast uint16_t type to netadrtype_t
So it compiles in C++
2025-02-09 23:13:29 +03:00
Alibek Omarov
72f1ac3780 wscript: ensure system-wide libbacktrace supports threads 2025-02-09 18:29:02 +03:00
Alibek Omarov
d7dc3192de 3rdparty: libbacktrace: fix applying uselib 2025-02-09 18:25:40 +03:00
Alibek Omarov
43ea65fffc ci: upgrade freebsd tasks. 2025-02-09 17:41:01 +03:00
Alibek Omarov
a72d921c12 wscript: add system-wide libbacktrace detection 2025-02-09 17:41:01 +03:00
Alibek Omarov
99b7d71824 wscript: set DEST_SIZEOF_VOID_P with allow 64bit flag 2025-02-09 17:16:17 +03:00
Alibek Omarov
67c73bdcbe engine: server: remove impulse 204, it's not used anywhere
Thanks @tyabus for reminding me about this feature.
2025-02-09 17:16:05 +03:00
Alibek Omarov
8b1dbcf166 ci: remove extra 20s of wait before removing current release and downloading artifacts 2025-02-09 17:02:31 +03:00
Alibek Omarov
5f60095dc4 scripts: flatpak: disable separate debuginfo 2025-02-09 16:54:51 +03:00
Alibek Omarov
c7282b488b 3rdparty: libbacktrace: disable linking zlib, lzma and zstd for now, figure this out later 2025-02-09 16:49:43 +03:00
Alibek Omarov
afa829d996 3rdparty: libbacktrace: don't define POSIX_SOURCE, it breaks build on Mac 2025-02-09 16:41:26 +03:00
Alibek Omarov
c06ea8d915 engine: platform: posix: add printing backtrace to stderr and logfile for libbacktrace backend 2025-02-09 16:41:26 +03:00
Alibek Omarov
bf344282ec android: explicitly set Waf output directory so it doesn't mess with current configuration and places generated files where CMake expects them to be 2025-02-09 16:20:38 +03:00
Alibek Omarov
21f62910ac engine: platform: posix: fix build when glibc execinfo.h is not available, but libbacktrace is still used 2025-02-09 16:20:38 +03:00
Alibek Omarov
54552d93ef Documentation: goldsrc-protocol-support: I am not going to support Dproto 2025-02-09 16:18:21 +03:00
Alibek Omarov
97455e7fd4 engine: platform: sdl: fix build after last PR 2025-02-09 15:56:16 +03:00
Alibek Omarov
6087d43043 3rdparty: libbacktrace: properly disable it on win32, nswitch and psvita 2025-02-09 15:55:12 +03:00
Alibek Omarov
c1a96d3ff1 engine: platform: posix: fix build 2025-02-09 15:51:25 +03:00
Alibek Omarov
e27d20dfa3 android: enable debug symbols for native libraries 2025-02-09 15:49:28 +03:00
Alibek Omarov
890e12ec76 engine: platform: posix: flush stdout/stderr before everything, include build branch 2025-02-09 15:45:44 +03:00
Alibek Omarov
774d2ac28a engine: platform: posix: add libbacktrace support for crash handler 2025-02-09 15:42:28 +03:00
Alibek Omarov
960d724828 3rdparty: libbacktrace: add submodule 2025-02-09 15:40:07 +03:00
Alibek Omarov
32aa1f91bf engine: pass argv0 to crash handler setup, which is required for libbacktrace integration
Fix indentation in crash_posix.c
2025-02-09 15:36:49 +03:00
Alibek Omarov
bd3634c815 wscript: add sanity test for opusfile because some distros don't ship 32-bit binary 2025-02-09 15:34:30 +03:00
Oleg
eda0ac92cc engine: platform: sdl: change behavior when window position is not set 2025-02-09 08:54:31 +03:00
Oleg
546903ea05 engine: platform: sdl: write windows position changes even in fullscreen 2025-02-09 08:54:31 +03:00
Oleg
4975001795 engine: platform: sdl: enumerate video modes for display where window located is instead of display zero 2025-02-09 08:54:31 +03:00
Oleg
a078ad1f51 engine: platform: sdl: fix windows save position for multiple monitors 2025-02-09 08:54:31 +03:00
Oleg
8307f671d4 engine: platform: sdl: let platform decide where to put our fullscreen window 2025-02-09 08:54:31 +03:00
Alibek Omarov
241fab02b1 ref: gl: don't try to free luma and detail texture of water texture, as these fields used by r_ripple 2025-02-08 16:57:20 +03:00
Alibek Omarov
1bfee70477 engine: con_utils: add autocompletion for cvar commands like set, reset and toggle 2025-02-08 16:45:52 +03:00
Alibek Omarov
eb51d17cd2 engine: server: enable sv_zmax clamping back to avoid overflowing zmax value encoded in delta 2025-02-08 16:38:11 +03:00
Alibek Omarov
b5cb0b9f10 ref: gl: add r_dlight_virtual_radius. It potentially fixes ugly dlight cut off on largely scaled textures (or at least allows to tune it)
It also adds a fix found in JoeQuake (which traces back to FitzQuake, in which
it is attributed to LadyHavoc, Darkplaces author) to exactly calculate whether
the light hits the surface, so we don't wrongly enable lighting on a surface by
an increased radius.
2025-02-07 23:07:08 +03:00
Alibek Omarov
a955d1e957 ref: gl: make GL_BuildPolygonFromSurface static, remove one global variable usage (which is unused anyway) 2025-02-07 22:55:38 +03:00
Alibek Omarov
2b2c967e85 engine: add ms3.mentality.rip master server 2025-02-07 19:32:37 +03:00
Alibek Omarov
c48d93e3ce public: use last Git commit date (committer date, to be exact) as more predictable source for build num 2025-02-07 17:51:10 +03:00
Alibek Omarov
8f257cc331 public: add parsing build date from ISO-8601 alike format 2025-02-07 17:47:23 +03:00
Alibek Omarov
151e7fe37b public: crtlib: check for empty buffer in Q_vsnprintf 2025-02-06 21:19:10 +03:00
Alibek Omarov
add02dc6f9 engine: fix potential UB in netadr_t 2025-02-06 20:54:18 +03:00
Alibek Omarov
d4c34abd6e engine: enable writing log even if console hasn't been enabled at the engine startup (it might be enabled later, it might also contain crash data) 2025-02-06 20:03:07 +03:00
Alibek Omarov
1d81e611f0 scripts: gha: use N+1 job count when building PSVita dependencies 2025-02-06 00:32:42 +03:00
Alibek Omarov
6a0038e26a ref: gl: always set texture env mode to GL_MODULATE in TriAPI's RenderMode call
Not sure if this is correct, but it's generally a good idea to restore it to an
expected value.
2025-02-06 00:30:32 +03:00
Alibek Omarov
1d99f65e86 filesystem: when shutting down, clean up gameinfo pointers and total games count 2025-02-05 21:14:08 +03:00
Alibek Omarov
5e524bca60 engine: client: enable half-texel hack for nearest filtering too, if the scaling factor isn't an integer 2025-02-05 20:16:16 +03:00
Alibek Omarov
cf3e56e275 engine: client: add alternative mode for hud_scale, where it scales HUD down to selected resolution with preserving aspect ratio 2025-02-05 19:47:59 +03:00
Alibek Omarov
ade560c601 common: cvar: make auto descriptions private to cvar subsystem, use them when Cvar_Get is called with NULL description
It allows us to not lose engine-side description when client or gameui registers cvar with the same name. In case of
menu it's the only way to get cvar pointer.
2025-02-05 19:11:16 +03:00
Alibek Omarov
62e3ba2126 engine: add cvars to control mounting additional directories
Use existing ui_language cvar for mounting localization folders.
2025-02-05 18:54:28 +03:00
Alibek Omarov
674a4e5883 filesystem: add ability to mount HD, LV, addon and language folders by engine request 2025-02-05 18:24:36 +03:00
Alibek Omarov
f911210b81 public: simplify ctype.h is* functions wrappers for null-terminated strings, add Q_isalpha 2025-02-05 18:21:18 +03:00
Alibek Omarov
14eb07653c engine: client: fix incorrect format in error message in CL_SetLightStyle 2025-02-05 17:41:01 +03:00
Alibek Omarov
54b0cf9991 ref: gl: check OES NPOT texture extension in BigGL mode 2025-02-05 14:00:44 +03:00
Alibek Omarov
3ebcb08a97 ref: gl: add cvar r_large_lightmaps to enable larger lightmap sizes, opt-in, yields better performance with VBO renderer 2025-02-05 13:02:37 +03:00
Alibek Omarov
23940f8590 readme: remove fontconfig from dependencies list, we aren't using it anymore [skip ci] 2025-02-04 21:00:42 +03:00
Alibek Omarov
687fb0123f engine: implement basic gamepad gyroscope calibration
Called on game controller becoming active or by user request.
Exposes current calibration state by read-only console variable.
2025-02-03 13:14:51 +03:00
Alibek Omarov
6c91fdb0cd ref: gl: gl2_shim: fix int vs GLuint 2025-02-02 20:57:37 +03:00
Alibek Omarov
4832232fd6 ci: attempt to fix flatpak upload 2025-02-02 20:31:51 +03:00
Alibek Omarov
185bce0489 engine: common: remove unused D_ enum used for MsgDev in old engine. Make sure all enums and structs here are not anonymous 2025-02-02 20:26:07 +03:00
Alibek Omarov
f460aa63b0 engine: platform: posix: don't forget to print backtrace to stderr too 2025-02-02 19:20:54 +03:00
Alibek Omarov
22f8b6f9c3 engine: platform: enable crash handler for macOS 2025-02-02 18:30:41 +03:00
Alibek Omarov
0cb034afc2 engine: wscript: improve execinfo and GNU backtrace() check 2025-02-02 18:18:26 +03:00
Alibek Omarov
d0464ef602 engine: platform: posix: use glibc-based backtrace implementation for crash handling, if execinfo.h can be found 2025-02-02 18:06:18 +03:00
Alibek Omarov
c3ebb84b97 ci: bump SDL2 to 2.30.12 2025-02-02 08:14:24 +03:00
Alibek Omarov
11742efbc3 engine: fix player move on dedicated servers 2025-02-02 08:08:15 +03:00
Alibek Omarov
95af635ab4 engine: client: add command replaybufferdat to aid in debugging protocol errors by parsing buffer.dat 2025-02-02 05:22:46 +03:00
Alibek Omarov
1abec80191 engine: client: set codepage to 0 if con_charset value is unknown 2025-02-02 02:34:08 +03:00
Alibek Omarov
93ebddfba3 public: utflib: simplify Q_EncodeUTF8 2025-02-02 02:31:56 +03:00
Alibek Omarov
5378494199 wscript: enable main() function for Android port, which was forgotten after last refactoring 2025-02-01 18:26:20 +03:00
Alibek Omarov
1b44d7733e engine: platform: add improved Platform_Vibrate2 function, that allows to control vibration strength 2025-02-01 18:08:53 +03:00
Alibek Omarov
694c630b44 engine: zone: don't error when trying to free NULL pointer, like standard C free() and C++ delete 2025-02-01 17:51:02 +03:00
Alibek Omarov
7df1d4b9e2 engine: platform: sdl: remove useless for us game controller events 2025-01-31 19:48:33 +03:00
Alibek Omarov
b16037eabf engine: drop raw SDL joystick API, always use GameController instead. Implement actually working rumble, ensure we're freeing up all resources related to gamepads 2025-01-31 17:50:19 +03:00
Alibek Omarov
bff7299f9b gha: publish binaries even if flatpak fails 2025-01-31 10:37:41 +03:00
Alibek Omarov
de196b1c58 common: xash3d_types: avoid defining true and false in C23 2025-01-31 10:36:27 +03:00
Alibek Omarov
a0eec8b85d scripts: waifulib: add special_install_path for platform-specific executable formats that create post link stage (was nro_install_path) 2025-01-31 10:25:02 +03:00
Alibek Omarov
c7e8ea2ffa scripts: gha: linux: build smaller SDL2 (without 2D renderer) for Linux as well 2025-01-31 10:02:19 +03:00
Alibek Omarov
1c1cf3d646 scripts: waifulib: psvita: make sce_sys truly optional in apply_vpk 2025-01-31 10:02:19 +03:00
Alibek Omarov
9759b80b78 scripts: waifulib: psvita: set default title id and app name to just test 2025-01-31 09:10:39 +03:00
Alibek Omarov
94b2c0b443 scripts: gha: build render-less SDL2 for PSVita 2025-01-31 09:10:09 +03:00
Alibek Omarov
ff8d17a5a8 scripts: waifulib: psvita: add missing cprogram attributes 2025-01-31 09:04:40 +03:00
Alibek Omarov
aa23196a55 scripts: waifulib: support vpk and nro pass for pure C programs, just in case 2025-01-30 20:51:01 +03:00
Alibek Omarov
83b488c37e wscript: let building client and dedicated server in the same configuration 2025-01-30 20:23:12 +03:00
Alibek Omarov
77abf621d7 ref: gl: make GL_Support and GL_MaxTextureUnits functions inlined 2025-01-30 19:02:53 +03:00
Alibek Omarov
f9d4ac2771 ref: gl: fix ugly seam at the skybox, thanks Spoike for help 2025-01-30 18:53:31 +03:00
Alibek Omarov
f076d84975 engine: platform: android: move dlsym-weak hack from C++ to C 2025-01-30 18:07:35 +03:00
Alibek Omarov
faf0b32a94 ref: gl: fix massive frame drop caused by ripples code rendering same texture multiple times in the frame 2025-01-29 20:15:21 +03:00
Alibek Omarov
feb80e5997 engine: platform: sdl: read gamecontrollerdb.txt from extras.pk3 2025-01-29 13:43:10 +03:00
Alibek Omarov
578a77518f engine: client: fix clearing keyboard buttons caused by typical brain fart 2025-01-29 10:04:47 +03:00
Alibek Omarov
2457ecf226 filesystem: fix recursive basedir possible cyclic dependency when default game directory uses a basedir that's base directory is undefined
That could happen when default game directory depends on base directory that don't have gameinfo.txt.
Because all game directories with liblist.gam automatically have dependency on default game directory, it causes cyclic dependency.
2025-01-29 09:49:29 +03:00
Alibek Omarov
8cd99885f1 filesystem: clean added status for game folders when purging search paths 2025-01-29 09:46:18 +03:00
Alibek Omarov
684e229ac8 engine: client: get rid of absolutely useless bitfields 2025-01-26 23:34:04 +03:00
SNMetamorph
c0f1d8c647 engine: model: fixed incorrect check in Mod_LoadModel 2025-01-26 23:27:18 +03:00
SNMetamorph
c3b8696957 engine: platform: win32: disable initializing console in case of regular game startup 2025-01-26 23:02:24 +03:00
Tom Kidd
3ca413dbab Fixed path calc for extras on Mac 2025-01-26 22:25:08 +03:00
Alibek Omarov
92dc04ff3c engine: client: minor change, add forgotten newline in CL_DeltaEntityGS Host_Error call 2025-01-25 17:51:48 +03:00
Alibek Omarov
ad6db91285 engine: move xashid stuff onto client 2025-01-25 17:51:48 +03:00
David DeGraw
90a0f74087 undo change to mod link 2025-01-25 08:23:04 +03:00
David DeGraw
4f7f5288a1 more nits 2025-01-25 08:23:04 +03:00
David DeGraw
c23b4bfe61 nits 2025-01-25 08:23:04 +03:00
David DeGraw
4780f70ea2 Improve mod installation instructions
Also improved uplink setup and used a better source for mod files.
2025-01-25 08:23:04 +03:00
NightFox
98a04c7764 FIx Matrix*x4_LoadIdentity (xash3d_mathlib.h) 2025-01-25 08:21:21 +03:00
Alibek Omarov
7da9772143 engine: check for macOS bundle in SDL_GetBasePath, and fallback to SDL_GetPrefPath for our directory 2025-01-23 22:58:19 +03:00
Alibek Omarov
f0b29bac1b engine: client: add cl_trace_consistency used to print which resources server wants to check 2025-01-23 13:57:17 +03:00
Alibek Omarov
7b5ff606bd 3rdparty: extras: enable compression of extras.pk3 2025-01-23 13:08:53 +03:00
Alibek Omarov
3e22ee64ae scripts: waifulib: zip: add support for passing compression level on Python 3.7. Exclude PNG files from compression 2025-01-23 13:08:21 +03:00
Alibek Omarov
c86c45503f engine: replace few more Xash3D strings by XASH_ENGINE_NAME macro 2025-01-23 10:33:22 +03:00
Alibek Omarov
ef75a4c28d engine: rename pref path on Mac to Xash3D FWGS by allowing for custom branding through XASH_ENGINE_NAME macro 2025-01-23 10:24:55 +03:00
Alibek Omarov
bccd3f2271 engine: pass launcher's default game directory all the way down to Platform_Init, so we mount correct extras.pk3 on Mac 2025-01-23 10:22:53 +03:00
Tom Kidd
7bbc3e8238 Made modifications for Mac App Bundle
- Looks for game data in SDL pref path (Application Support)
- Sets XASH3D_EXTRAS_PAK1 to SDL base path (Resources dir in App Bundle
- Added option to force search for SDL dylib via pkgconfig on Darwin instead of Framework (option for Mac Source Ports build process)
2025-01-23 10:15:47 +03:00
Alibek Omarov
c34e0c66d9 engine: add fuzzing target for Mod_LoadModel 2025-01-23 10:12:32 +03:00
Alibek Omarov
e5d80878b8 scripts: waifulib: add asan-only build type 2025-01-23 10:11:56 +03:00
Alibek Omarov
1e075d25b7 engine: make LZSS compression optional for 49 protocol, disable it for local clients (singleplayer) 2025-01-22 21:18:19 +03:00
Alibek Omarov
d29e53481d engine: client: remove unused S_StreamAviSamples 2025-01-22 20:01:11 +03:00
Alibek Omarov
d23a2fd2df engine: client: stub AVI_StreamSound RenderAPI call, it is not used in ffmpeg-based video playback code 2025-01-22 20:00:50 +03:00
Alibek Omarov
f6f15cc204 engine: mod_studio: validate studio self-reported length before loading model 2025-01-22 20:00:13 +03:00
Alibek Omarov
4f2249ed8e ref: support loading sprites with truncated palette 2025-01-22 19:24:00 +03:00
Alibek Omarov
9f322df498 engine: imagelib: handle loading truncated palette files, by filling remaining bytes with zeros 2025-01-22 19:21:51 +03:00
Alibek Omarov
b554d7e215 ref: properly handle unloading sprites that aren't loaded completely 2025-01-22 19:20:20 +03:00
Alibek Omarov
719093c10b ref: properly return false to the engine if renderer refuses to load the model for some reason 2025-01-22 19:13:23 +03:00
Alibek Omarov
c2da140ccc engine: model: do not crash if renderer refused to load this model 2025-01-22 19:12:43 +03:00
Alibek Omarov
375998dffb Cleanup xash3d_types.h from engine-specific macros and types 2025-01-22 15:10:18 +03:00
Alibek Omarov
787444f63d engine: simplify sound fx allocation 2025-01-22 14:46:40 +03:00
Alibek Omarov
0c50076ff0 engine: zone: ensure poolcount is zero on Memory_Init 2025-01-22 13:49:51 +03:00
Alibek Omarov
8ce01c38c7 engine: http: ensure we don't write broken decompressed files 2025-01-22 13:49:24 +03:00
Alibek Omarov
cac6206984 engine: client: allocate everything related to sounds in the sound pool 2025-01-22 13:49:02 +03:00
Alibek Omarov
a5c88bdda9 engine: touch: allow smoother migration from old engine touch configs by stripping .tga extension 2025-01-22 13:40:47 +03:00
Alibek Omarov
fc017286a6 engine: base_cmd: slightly faster search based on assumption that list is always ordered 2025-01-22 05:41:52 +03:00
Alibek Omarov
20d4e3e719 engine: fix flexible array member usage in case of null terminated strings
(woops)
2025-01-22 05:41:52 +03:00
Alibek Omarov
4eaa32fc10 engine: whereami: sync with upstream 2025-01-21 20:03:20 +03:00
Alibek Omarov
b7c025b167 filesystem: android: request buffer for Android asset LoadFile implementation
Might be better than asking for random access and then only reading forward.
2025-01-21 19:50:14 +03:00
Alibek Omarov
f29c588e0f filesystem: take code from DarkPlaces to properly read compressed files 2025-01-21 18:47:42 +03:00
Alibek Omarov
2065ef143a engine: server: fix ent_create under PrimeXT 2025-01-21 16:09:56 +03:00
Alibek Omarov
a5c02c85f0 filesystem: wad: get rid of sentinel value at the end of wad_types array 2025-01-21 15:26:06 +03:00
Alibek Omarov
9a8761f1d8 engine: client: remove unused NetAPI_ValueForKey function 2025-01-21 15:17:03 +03:00
Alibek Omarov
273990d292 engine: cmd: store command description in flexible array member 2025-01-21 15:06:08 +03:00
Alibek Omarov
0e27d8717c ref: remove servercount from texture struct, Xash don't use it (and it's also harmful anyway) 2025-01-21 14:36:42 +03:00
Alibek Omarov
8a9b209db0 engine: zone: optimize memory usage a bit by compressing memheader_t better while keeping it efficient
It saves about 40 kilobytes of memory.
2025-01-21 14:04:33 +03:00
Alibek Omarov
232d1f8583 engine: make separate mempools for cmds, cvars and basecmd 2025-01-21 11:26:35 +03:00
Alibek Omarov
6cfa5877a4 engine: base_cmd: decrease base cmd hash size 2025-01-21 11:25:33 +03:00
Alibek Omarov
154df00f94 filesystem: don't create full path to rwdir, as cwd is always equal to rwdir
Fixes updating gameinfo.txt.
2025-01-20 19:53:04 +03:00
Alibek Omarov
c5649c94d5 engine: client: fix delta entity packet flush on GoldSrc protocol
Implement counting playerbytes for more accurate net_graph, even if we're
skipping this delta frame.
2025-01-20 19:38:44 +03:00
Alibek Omarov
a1da10fe38 filesystem: set default values for quick/autosave aged count 2025-01-20 16:06:57 +03:00
Andrey Akhmichin
17a71ffc96 ci: upgrade freebsd tasks. 2025-01-19 04:36:07 +03:00
Andrey Akhmichin
4609fbc0c5 Documentation: supported-mod-list.md: update links. 2025-01-19 04:35:17 +03:00
Andrey Akhmichin
d278d3bdd7 engine: common: fix clang build. 2025-01-19 04:33:06 +03:00
Alibek Omarov
7811b60292 engine: common: fix build for apple and freebsd-15 2025-01-18 10:40:12 +03:00
Alibek Omarov
870fad5606 public: tests: remove Q_colorstr tests 2025-01-18 10:36:11 +03:00
Alibek Omarov
3e93aa459d engine: net_buffer: turn bit write and read masks into predefined arrays, so we don't have to call InitMasks
In future, net_buffer might get moved to libpublic.

Also, get rid of 32-th bit write mask, it's only get used when we're trying to
write zero bits value which is nonsense.
2025-01-18 09:54:11 +03:00
Alibek Omarov
626c5e44f6 engine: client: use existing engine functions for some client API functions 2025-01-18 09:44:21 +03:00
Alibek Omarov
c906aa0106 ref: gl: make DrawGLPoly and R_TextureAnimation private to brush rendering code 2025-01-18 08:39:31 +03:00
Alibek Omarov
0a41b70e44 ref: gl: store ripple texture in texture's fb_texturenum as it's only used for water and water don't have luma 2025-01-18 08:38:43 +03:00
Alibek Omarov
ea338adc46 ref: gl: make GL_FrustumSetPlanme private to the frustum implementation 2025-01-18 08:34:25 +03:00
Alibek Omarov
5fa777578b ref: gl: fix detail texture leak, fix texture leak when texture have default texture set (in which case it still might have other textures set) 2025-01-18 08:33:20 +03:00
Alibek Omarov
5b9db5940b engine: mod_bmodel: don't try to load luma/fullbright texture for water, as no renderers support it anyway, and instead we will use that field for rippletexture 2025-01-18 08:30:59 +03:00
Alibek Omarov
4b1b3aa13c public: remove Q_colorstr, as it's completely useless and checking for color string is easy actually 2025-01-18 08:29:36 +03:00
Alibek Omarov
2d51d23d89 engine: client: don't send commands until ca_active on Xash protocol 2025-01-17 15:06:59 +03:00
Alibek Omarov
b5b6dad39c engine: fix a typo in scroll lock (missing L) 2025-01-15 23:49:13 +03:00
Alibek Omarov
a5619e9960 engine: take keydefs header from Quake-2 source code (client/keys.h) 2025-01-15 23:47:55 +03:00
Alibek Omarov
a75666a3cd engine: common: fix dedicated build by defining SV_GetMaxClients before CL_GetMaxClients stub (that redirects to it)
Also remove CL_Shutdown from dedicated stub lists.
2025-01-14 13:10:02 +03:00
Alibek Omarov
49426721d8 engine: use zero initializers instead of memset 2025-01-14 12:11:27 +03:00
Alibek Omarov
04125284a3 engine: dedicated: make some stubs inlined 2025-01-14 12:10:31 +03:00
Alibek Omarov
1d4f7b2f94 engine: server: slight refactoring, make SV_ModelHandle inlined, move PlayerIsFrozen to sv_client, fix packet loss data type 2025-01-14 12:09:23 +03:00
Alibek Omarov
38c82a3f76 engine: don't bother calculating crc32 for local clients for better performance (thanks @tyabus for the idea) 2025-01-14 11:55:28 +03:00
Alibek Omarov
785632a437 filesystem: minor refactoring in MD5_HashFile, use initializer instead of memset, limit buffer variable scope 2025-01-14 11:36:13 +03:00
Alibek Omarov
4be75af214 engine: client: always write buffer.dat so we will be able to request it from users. Append protocol number to it 2025-01-14 11:31:10 +03:00
Alibek Omarov
dcdca01e86 ref: gl: declare VBO globals static 2025-01-14 11:30:35 +03:00
Alibek Omarov
201d9c8f80 public: split VCS info to separate file for slightly better compilation speeds 2025-01-13 20:02:59 +03:00
Alibek Omarov
69341e36a3 public: expose commit and branch as global variables instead of functions 2025-01-13 20:02:59 +03:00
Alibek Omarov
3532a77643 public: move git commit and branch private to libpublic 2025-01-13 20:02:59 +03:00
Alibek Omarov
35dc072b26 filesystem: on Android, assume all paths are case-sensitive because doing Linux-specific ioctl check crashes FUSE driver and kills our app 2025-01-13 13:56:15 +03:00
Alibek Omarov
f92a3695b3 filesystem: fix fd leak in Platform_GetDirectoryCaseSensitivity 2025-01-13 13:54:42 +03:00
Alibek Omarov
a7b776f3b9 Revert "wscript: disable /showIncludes based msvcdeps for now, it causes issues with non-English locales"
Add option --enable-msvcdeps that we only enable on CI.

This reverts commit e58007aab3.
2025-01-10 21:48:43 +03:00
Alibek Omarov
f2fb668c9e android: now run exit() from Java side, as the next engine run is expected to be clean 2025-01-09 21:29:01 +03:00
Alibek Omarov
90e493fa3a engine: common: add Host_ExitInMain function that will force engine return from Host_Main() function, essentially making engine gracefully exit on Android
In future, this might be used everywhere, so users would be able to add custom
cleanup in some advanced game_launch implementation, on any platform.
2025-01-09 20:31:26 +03:00
Alibek Omarov
692bcc4073 engine: client: cl_tent: rewrite fizz effect, fix incorrect positoning along the way 2025-01-09 19:23:40 +03:00
Alibek Omarov
823642b10d readme: add link to ipa-reader.com for Xash word pronounciation [skip ci] 2025-01-09 17:13:56 +03:00
Alibek Omarov
07189ca2f5 engine: client: remove spammy message about not precached model on client side
Recently, mods (Brutal Half-Life v3 and MMod) started to call this function
every frame as a hacky way to detect presence of some model on the level. I
don't know why they do that, but users (who co-incidentally run engine with
-dev) has been complaining about console spam.

This is why we can't have things.
2025-01-09 17:10:54 +03:00
Alibek Omarov
0d55441830 engine: properly pass shutdown reason down to close log, helps to finally get rid of global finalmsg 2025-01-09 08:04:18 +03:00
Alibek Omarov
98ff33d9e2 engine: mod_bmodel: rewrite .lit file loader using normal stream io functions 2025-01-09 08:02:39 +03:00
Alibek Omarov
baa8fbaaec engine: mod_bmodel: fix misleading debug message telling about monochrome lighting when .lit file is used 2025-01-09 08:02:39 +03:00
Alibek Omarov
a0b46da04b engine: consolidate all box clipnodes used in studio models, pmove and server in a single place 2025-01-09 08:02:39 +03:00
Alibek Omarov
e70ba7ad64 engine: now, remove SUPPORT_BSP2_FORMAT macro, only prevent ref_soft from loading such maps 2025-01-09 08:02:39 +03:00
Alibek Omarov
8a41be9d47 engine: server: finally, make a union for large leaf indices in edict_t so we can run bsp2 maps without recompiling 2025-01-09 08:02:39 +03:00
Alibek Omarov
47aff9e30b engine: hack mnode_t struct so we can have 24-bit face and children indices to support BSP2 format in runtime 2025-01-09 08:02:39 +03:00
Alibek Omarov
ced8744ac9 engine: split edge struct into two with 16-bit indicies and 32-bit indicies to support BSP2 format in runtime 2025-01-08 14:46:07 +03:00
Alibek Omarov
734c07ddab engine: split clipnodes struct into two with 16-bit indicies and 32-bit indicies to support BSP2 format in runtime 2025-01-08 14:46:07 +03:00
Alibek Omarov
ceb603488a engine: platform: sdl: set up our custom log output function to catch all SDL errors in engine log file 2025-01-08 10:10:45 +03:00
Alibek Omarov
80bac157eb Update SDL to 2.30.11, use GitHub links for SDL, as it might be faster on Actions virtual machines 2025-01-08 09:42:53 +03:00
Alibek Omarov
b45581c630 Documentation: gameinfo: add a note about liblist.gam and gameinfo.txt changes 2025-01-08 01:22:23 +03:00
Alibek Omarov
d4fe3d6f8a filesystem: wscript: check d_type field in struct dirent, as this is an extension and some supported ports (like psvita) don't have it 2025-01-08 01:22:23 +03:00
Alibek Omarov
1907485895 filesystem: re-enable folder check for array returned by listdirectory with dirs_only set to true
According to glibc manual, not all filesystems support it and some might return DT_UNKNOWN.
2025-01-08 01:22:23 +03:00
Alibek Omarov
cfebb3e1d6 filesystem: massively rework how scanning game directories work
* No more conversion from liblist.gam to gameinfo.txt. We are using liblist.gam directly now.
  gameinfo.txt being native format to Xash3D not only remains, it takes priority over liblist.gam.
* Quake game directories now don't receive autogenerated gameinfo.txt.
* Empty directories don't get gameinfo.txt either, finally making it easier to support HD addon folders.
* If user still wishes to generate gameinfo.txt, there is now command fs_make_gameinfo that creates
  gameinfo.txt for currently running game.
* No more creating empty folders for RoDir. They are now created on demand.
2025-01-08 01:22:23 +03:00
Alibek Omarov
f9a0057c28 wscript: fix bsp2 build bruh 2025-01-08 01:22:23 +03:00
Alibek Omarov
ceb2b0c5e4 filesystem: add utility function FS_CheckForQuakePak that parses Quake PAK file and looks for specific files in it's root
Used to properly detect Quake game dirs.
2025-01-08 01:22:23 +03:00
Alibek Omarov
83b5edea88 engine: platform: sdl: clear key states on losing window focus 2025-01-06 16:38:16 +03:00
Alibek Omarov
9d2a85f11f engine: client: clear mouse state along with everything else in Key_ClearStates 2025-01-06 16:38:16 +03:00
Alibek Omarov
93d3df81ee engine: client: small refactoring and better explanation for char input handler for menus that don't query our extended API 2025-01-06 16:00:11 +03:00
Alibek Omarov
2a7f13151a engine: cmd: when command is already defined and has the same function pointer, show it as warning 2025-01-06 13:51:25 +03:00
Alibek Omarov
0c4f6ae61d engine: client: like GoldSrc, use cancelselect command for escape key. It is handled in client.dll and allows mods to override Esc key behavior 2025-01-06 13:51:25 +03:00
Andrey Akhmichin
b7150c3208 Documentation: opensource-mods.md: add "Earth Special Forces". 2025-01-02 05:35:33 +03:00
Alibek Omarov
d6ebff81e2 engine: client: vgui: track textures upload to avoid issues in buggy mods (that are probably will never get fixed) 2024-12-30 07:28:33 +03:00
Alibek Omarov
ce4148f351 engine: client: vgui: deprecate VGUI_CreateTexture and VGUI_UploadTextureBlock functions, as they never used by vgui_support module
* vgui_support used them in old engine for font cache, but we don't have that anymore.
2024-12-30 07:16:30 +03:00
Alibek Omarov
08c2632c14 engine: platform: nswitch: export _Unwind_GetIPInfo as required by cs16-client 2024-12-29 09:11:21 +03:00
Alibek Omarov
03eac904c1 public: make COM_FixSlashes inlined 2024-12-29 09:05:15 +03:00
Alibek Omarov
62f3354f4e mainui: update 2024-12-29 08:06:58 +03:00
Alibek Omarov
d5b6eff0c0 game_launch: fix --disable-menu-changegame by request 2024-12-29 08:06:50 +03:00
Alibek Omarov
c9ee844a24 scripts: gha: bundle SDL2 pdb file for better stacktraces on Windows 2024-12-29 02:08:05 +03:00
Alibek Omarov
687c9b004f engine: platform: sdl: set directsound as default audio driver on Windows, due to incompatibilities with mods 2024-12-29 02:01:23 +03:00
Alibek Omarov
14e79f04ac engine: prevent extra malloc in exec by checking if cfg already contains newline at EOL and appending it to cbuf if required 2024-12-28 16:03:49 +03:00
Alibek Omarov
5d6cf48687 engine: client: fix lightstyle timings on GoldSrc protocol, share the parser with Quake protocol handler 2024-12-28 01:40:59 +03:00
Alibek Omarov
88949a9ee6 engine: launcher: drop support for changing games from within internal launcher for platforms that do not have execv equivalent 2024-12-27 18:45:31 +03:00
Alibek Omarov
2d1e76199b engine: host: always print Host_Error text to log, even if console hasn't been enabled 2024-12-27 18:37:25 +03:00
Alibek Omarov
a5d78ecfd7 engine: be more verbose on why the engine is going to be shut down 2024-12-27 18:30:46 +03:00
Alibek Omarov
3576e474e6 engine: get rid of SendKeyEvents function, it only listened for WM_QUIT on Windows and we don't use that with SDL 2024-12-27 18:30:01 +03:00
Alibek Omarov
d50927f21f ref: gl: make r_ripple work with non-square non-pot textures, fix holes caused by unexpected transparency 2024-12-26 06:31:53 +03:00
Alibek Omarov
c6e3146290 ref: gl: fix broken water texture when it was discarded by R_UploadRipples 2024-12-26 03:49:12 +03:00
Alibek Omarov
9811988cce engine: server: set mapname globals field before making first call into DLL, as some mods tend to read it too early 2024-12-26 02:50:30 +03:00
Alibek Omarov
48bdd4238e engine: always include reason to server shutdown 2024-12-26 02:13:13 +03:00
Alibek Omarov
fd2b7e9197 engine: client: declare music command as overridable as the same command exists in HLU SDK 2024-12-26 01:16:48 +03:00
Alibek Omarov
0e42e5b9e3 engine: command: introduce new type of commands that can be overriden by a mod DLL for better compatibility 2024-12-26 01:15:32 +03:00
Alibek Omarov
65750f0cf3 engine: server: hack save fields that use types unsupported by Half-Life Unified SDK through array types 2024-12-26 00:36:28 +03:00
Alibek Omarov
6469b0a5f5 engine: common: shut up warn-unused-result on log write functions, only fetch system time for system logs when necessary 2024-12-24 11:27:34 +03:00
Alibek Omarov
4f98187e9a engine: move select-based stdin input function to platform/posix 2024-12-24 11:13:05 +03:00
Alibek Omarov
74c19a1557 engine: client: leave SDL2 client.dll detection for Windows only 2024-12-24 10:46:39 +03:00
Alibek Omarov
cfebee6ea8 engine: split crashhandler to win32 and posix versions 2024-12-24 10:37:49 +03:00
Alibek Omarov
bd0d6644e0 engine: move Sys_SendKeyEvents to platform/win32 2024-12-24 09:59:47 +03:00
Alibek Omarov
f41450127a Documentation: add note about pkg-config when compiling for Windows under Wine 2024-12-24 09:59:09 +03:00
Alibek Omarov
70897af362 public: add dll helpers to simplify basic interaction with exported functions lists 2024-12-23 04:43:15 +03:00
Alibek Omarov
f1d7101ad8 engine: client: get rid of NULL sentinels at the end of arrays 2024-12-22 07:43:26 +03:00
Alibek Omarov
ac9d960eef engine: common: get rid of NULL sentinels at the end of arrays 2024-12-22 07:22:10 +03:00
Alibek Omarov
0c471aecb1 engine: common: imagelib: get rid of NULL sentinels at the end of arrays 2024-12-22 07:21:06 +03:00
Alibek Omarov
72d0d70587 engine: server: get rid of NULL sentinels at the end of arrays 2024-12-22 07:12:32 +03:00
Alibek Omarov
bec526a77e utils: xar: fix xar build 2024-12-22 07:11:53 +03:00
Alibek Omarov
4d1119391a ref: gl: get rid of NULL sentinels at the end of arrays 2024-12-22 07:11:28 +03:00
Alibek Omarov
1dd622fcbb engine: client: keys: refactoring, remove NULL sentinels, make keys structs and few more functions private to keys.c file 2024-12-21 15:22:48 +03:00
Alibek Omarov
af4b64983a engine: fix a typo in Cmd_AddFilteredCommand flags passed to Cmd_AddCommandEx. Make them return Cmd_AddCommandEx value 2024-12-21 15:01:04 +03:00
Alibek Omarov
e751092555 engine: common: cmd: consider filtered buffer privileged when we're running local singleplayer game 2024-12-20 05:48:33 +03:00
Alibek Omarov
ce06b1d3d7 engine: client: allow CL_GetLocalPlayer to return NULL rather than halting whole server 2024-12-20 05:47:46 +03:00
Alibek Omarov
a834f4996f engine: move client adding functions to their appropriate subsystems and make them static. Make in-engine functions inlined. 2024-12-20 05:47:46 +03:00
Alibek Omarov
fdcf267fe3 engine: client: fix usermessage being removed because of case-sensitivity (message names are case-insensitive when transferred from server to client) 2024-12-20 03:05:14 +03:00
Alibek Omarov
7f2ebd1b5e engine: server: add command sv_list_messages to print all registered user messages 2024-12-20 02:37:38 +03:00
Alibek Omarov
68b2d9f269 engine: server: fix possible message number inconsistency if server requested it twice 2024-12-20 02:37:01 +03:00
Alibek Omarov
3f1eed9f59 engine: client: remove svc_goldsrc_* definitions for message that semantics matches Xash3D 49 protocol and instead use it's definitions 2024-12-20 01:51:24 +03:00
Alibek Omarov
0637dbaab1 engine: client: refactor and simplify CL_RegisterUserMessage 2024-12-20 01:51:24 +03:00
Alibek Omarov
85388e97c1 engine: client: add command cl_list_messages to print all registered user messages 2024-12-20 01:51:24 +03:00
Alibek Omarov
de961eb45e engine: client: use new extension for creating temporary files for demoheader 2024-12-19 07:10:02 +03:00
Alibek Omarov
3d60770b84 filesystem: add flag to open files in a RAM
On Linux, it uses memfd_create syscall that can be found on Linux 3.17 and
higher. By default memfds are executable, so we set MFD_NOEXEC_SEAL flag to
prevent execution at creation time.
2024-12-19 04:22:25 +03:00
Alibek Omarov
93c5853356 engine: server: merge SV_FindBestBaseline for normal entities and static entities into single function 2024-12-18 06:57:43 +03:00
Alibek Omarov
98e587285b engine: client: allocate static entities only when server sends static entity packet 2024-12-18 06:57:43 +03:00
Alibek Omarov
2aa13c8347 public: xash3d_mathlib: include string.h with memset definition 2024-12-17 21:58:42 +03:00
Alibek Omarov
53344771fd public: xash3d_mathlib: get rid of matrix identity global macros 2024-12-17 21:01:51 +03:00
Alibek Omarov
2373743920 public: mention FSF in copyright header, as some of the libc extensions callbacks were derived from glibc [skip ci] 2024-12-17 20:41:55 +03:00
Alibek Omarov
90a3497afe public: improve Q_strncat fallback implementation 2024-12-17 20:40:19 +03:00
Alibek Omarov
339aebb08c public: add Q_strnlen with fallback to memchr 2024-12-17 20:03:09 +03:00
Alibek Omarov
b4afe390d6 public: slight refactoring 2024-12-17 19:57:27 +03:00
Alibek Omarov
ca0c5f929a engine: slight refactoring of lightstyle handling functions 2024-12-17 17:04:26 +03:00
Alibek Omarov
48cc526c7e engine: client: fix possible svc_pings misparse by reading until null bit is encountered 2024-12-15 18:22:40 +03:00
Alibek Omarov
3d30dc8d02 mainui: update 2024-12-08 01:58:39 +03:00
Alibek Omarov
75adb2e686 engine: server: for entities physics code directly use cvar values rather than movevars. Leave movevars to player movement only 2024-12-08 01:39:24 +03:00
Alibek Omarov
45787a87b3 android: try to enable poly-opt and lto optimizations for release builds 2024-12-05 22:33:22 +03:00
Alibek Omarov
0a85734ae7 engine: server: avoid useless copying in SV_GetClientIDString for bots or local clients 2024-12-05 19:49:51 +03:00
Alibek Omarov
b28c1186b2 filesystem: fix loading dlls by full path as required by metamod-r 2024-12-05 19:20:13 +03:00
Alibek Omarov
5007f8488c engine: host: add simple usage help for -bugcomp flag 2024-12-05 18:29:54 +03:00
Alibek Omarov
f7062498c2 engine: turn old pfnGetGameDir behavior into a bugcomp flag get_game_dir_full
This function is kinda nasty, some mods (like old RCBot builds) expect a slash,
some newer mods (like Sandbot) doesn't. To preserve compatibility with both old
and new mods, just add it as bug compatibility flag.
2024-12-05 18:14:15 +03:00
Alibek Omarov
964744d330 engine: client: fix broken build due to incorrect constant being used 2024-12-05 14:20:43 +03:00
Alibek Omarov
f5d635b67b engine: client: allow VOX words use other formats than WAV 2024-12-05 12:41:56 +03:00
Alibek Omarov
d0112a98b5 engine: client: improve error reporting in VOX_LoadSound, allow longer result paths, fix possible buffer overflow 2024-12-05 12:41:56 +03:00
Alibek Omarov
614b9113ad engine: platform: as an exception, allow calling direct platform-specific implementations of Platform_Sleep to make them inlined 2024-12-04 18:37:55 +03:00
Alibek Omarov
e14cd758ad engine: turn Platform_Sleep into an inline function that directly calls platform-specific delay functions 2024-12-04 18:32:03 +03:00
Alibek Omarov
de1361d99d android: don't show unfinished downloads. Set progress to 1.0f when done 2024-12-04 17:08:55 +03:00
Alibek Omarov
e731775f70 android: cleanup unused imports 2024-12-04 16:27:53 +03:00
Alibek Omarov
342d61b283 engine: platform: sdl: always call SDL_Quit in Platform_Shutdown 2024-12-04 16:14:56 +03:00
Alibek Omarov
b030cdb4e3 engine: client: add NULL check to prevent crash if in_graph key doesn't exist in client.dll 2024-12-03 21:56:06 +03:00
Alibek Omarov
18a973d4f2 engine: server: always set sv_background to zero on server shutdown rather than on server dll unload 2024-12-03 21:02:37 +03:00
Alibek Omarov
51fa7d2611 wscript: strip lib prefix from new opus and vorbis targets, don't link them in dedicated 2024-12-02 21:59:11 +03:00
Alibek Omarov
6b6d3b3770 3rdparty: opusfile: wscript: hack building on Android with API level lower than 24
In API level 21 **and** _FILE_OFFSET_BITS == 64 we don't get fseeko/ftello functions.
To avoid increasing API level, just set _FILE_OFFSET_BITS to some bogus value.
Undefining it doesn't work as opusfile sets it to 64 automatically.
2024-12-02 21:28:36 +03:00
Alibek Omarov
fd5e3fbbb9 android: configure waf with bundled deps to not look for system libs, as Android doesn't have any 2024-12-02 21:10:10 +03:00
Alibek Omarov
6247bbc629 3rdparty: libogg: wscript: remove useless defines 2024-12-02 21:10:00 +03:00
Alibek Omarov
0181e640c9 3rdparty: wscript: set explicit names for correct dependency calc of generated files
This helps avoid issue when the bzip2 or libogg are compiled before header is
generated for them.
In theory, we shouldn't do that, but I guess dependency calculation through
include directives doesn't work when the file doesn't exist.
2024-12-02 21:07:30 +03:00
Alibek Omarov
26230596ba 3rdparty: bzip2: wscript: bring back generating bz_version.h.in now that cmake.py has subst support 2024-12-02 21:07:12 +03:00
Alibek Omarov
884e052d98 scripts: waifulib: cmake: replicate Waf behavior and always add build directories to the include path.
Also, set cmake minimum required version to 3.5 only to shut up deprecation notice.
2024-12-02 21:06:07 +03:00
Alibek Omarov
5516180ed8 scripts: waifulib: cmake: add limited subst feature support 2024-12-02 21:05:59 +03:00
Alibek Omarov
6d00aef398 engine: move soundlib onto client, only leave snd_utils with some functions that's engine core or server are dependent on 2024-12-02 21:05:41 +03:00
Alibek Omarov
2d52dae69c engine: common: soundlib: reformat everything using uncrustify 2024-12-02 21:05:34 +03:00
Alibek Omarov
eb64ffcec9 uncrustify: sync with fakk2-sdk and make some fixes on star ptr alignments 2024-12-02 21:05:28 +03:00
Alibek Omarov
7eba5a994d wscript: specifically look for opus 1.4, as 1.5 have broken custom modes
Link to GitHub issue: https://github.com/xiph/opus/issues/374
2024-12-02 21:05:08 +03:00
Alibek Omarov
c39d2e243a wscript: look for system provided vorbis and opus dependencies
In some configuration, like Flatpak, on dev machines or when packaging for *nix
we can safely link with system libraries.
2024-12-02 21:04:28 +03:00
SNMetamorph
3661af921e readme: added mention of Ogg Vorbis & Ogg Opus formats support 2024-12-02 20:36:33 +03:00
SNMetamorph
4581755f9b 3rdparty: libogg: added generating of config_types.h 2024-12-02 20:36:33 +03:00
SNMetamorph
593b0f295a engine: soundlib: added proper errors reporting for Ogg Opus sound routines 2024-12-02 20:36:33 +03:00
SNMetamorph
7c23b6473c engine: soundlib: added proper errors reporting to Ogg Vorbis sound routines 2024-12-02 20:36:33 +03:00
SNMetamorph
960a3a1483 engine: soundlib: minor codestyle and headers-related fixes 2024-12-02 20:36:33 +03:00
SNMetamorph
485d4324f8 3rdparty: libvorbis & libvorbisfile combined into one wscript 2024-12-02 20:36:33 +03:00
SNMetamorph
881788c0c9 3rdparty: libogg & opusfile wscript fixes 2024-12-02 20:36:33 +03:00
SNMetamorph
73cf55b958 wscript: link sound format related libraries in XASH_DEDICATED build mode 2024-12-02 20:36:33 +03:00
SNMetamorph
b7c2c476a8 engine: soundlib: implemented sound looping feature for Ogg Vorbis 2024-12-02 20:36:33 +03:00
SNMetamorph
fa152bef20 engine: soundlib: implemented sound looping feature for Ogg Opus 2024-12-02 20:36:33 +03:00
SNMetamorph
770054daaf engine: soundlib: implemented Ogg Opus sounds streaming 2024-12-02 20:36:33 +03:00
SNMetamorph
2ad5066271 engine: soundlib: different Ogg sound formats split to separate files 2024-12-02 20:36:33 +03:00
SNMetamorph
99acd64203 engine: soundlib: implemented Ogg Vorbis sounds streaming 2024-12-02 20:36:33 +03:00
SNMetamorph
86154f81aa engine: soundlib: allowed resampling sounds with rate >44kHz 2024-12-02 20:36:33 +03:00
SNMetamorph
e982b7911f engine: soundlib: implemented Ogg Opus sounds playback 2024-12-02 20:36:33 +03:00
SNMetamorph
4e138ee795 engine: wscript: link libopusfile dependency 2024-12-02 20:36:33 +03:00
SNMetamorph
8e5d0a6425 3rdparty: opusfile: added wscript for libopusfile 2024-12-02 20:36:33 +03:00
SNMetamorph
33901afa57 3rdparty: added libopusfile submodule 2024-12-02 20:36:33 +03:00
SNMetamorph
8fce7dc78e engine: soundlib: initially implemented Ogg Vorbis sounds playback 2024-12-02 20:36:33 +03:00
SNMetamorph
d618b817ca engine: wscript: link libvorbisfile dependency 2024-12-02 20:36:33 +03:00
SNMetamorph
914be8dbd7 3rdparty: vorbis: added wscript for libvorbisfile 2024-12-02 20:36:33 +03:00
SNMetamorph
9e67a90b25 3rdparty: vorbis: added wscript for libvorbis 2024-12-02 20:36:33 +03:00
SNMetamorph
44e67c987b 3rdparty: added Vorbis submodule 2024-12-02 20:36:33 +03:00
SNMetamorph
3c6c90c1e7 3rdparty: libogg: added wscript for libogg 2024-12-02 20:36:33 +03:00
SNMetamorph
3e8bd16d2b 3rdparty: added libogg submodule 2024-12-02 20:36:33 +03:00
Alibek Omarov
fb964b8686 mainui: update 2024-12-01 11:34:44 +03:00
Alibek Omarov
38ef16b08b engine: server: do not unload server library on win327 2024-12-01 11:21:02 +03:00
Alibek Omarov
1f5c97964b engine: return full path in server's pfnGetGameDir, if possible 2024-11-30 09:28:30 +03:00
Alibek Omarov
4798cd6d1e filesystem: add new export to get fs_rootdir path 2024-11-30 09:28:30 +03:00
Alibek Omarov
df4194ca57 engine: net_chan: check BZ2 functions return value and log if it's not BZ_OK 2024-11-28 19:27:13 +03:00
Alibek Omarov
888599677e engine: net_chan: fix size of outgoing BZ2 compressed packets 2024-11-28 18:50:55 +03:00
Alibek Omarov
22da42b121 3rdparty: mainui: update 2024-11-27 16:59:18 +03:00
Alibek Omarov
5ad8bc3ba4 3rdparty: update submodules 2024-11-27 16:40:14 +03:00
Alibek Omarov
0154ffa060 wscript: try to automatically set console subsystem flag depending on target features
Remove subsystem flag from shlibs and stlibs, it's only required for executables.
2024-11-27 15:43:13 +03:00
Alibek Omarov
cb3f5a74a8 wscript: don't check for cmake twice 2024-11-27 15:08:42 +03:00
Alibek Omarov
b3c7dbe3e4 wscript: don't install import libraries 2024-11-27 15:08:28 +03:00
Alibek Omarov
6b24b263ab engine: host: expose new -clientport settings. Realign options 2024-11-25 02:53:28 +03:00
Alibek Omarov
75b69fbf85 engine: net_ws: allow setting custom client port 2024-11-25 02:51:40 +03:00
Alibek Omarov
23b410ccb0 engine: mod_bmodel: optimize loading wad textures by directly loading it from the archive through new filesystem functions 2024-11-23 15:04:05 +03:00
Alibek Omarov
bf6a9cb0e7 engine: client: make R_GetTextureParms inlined 2024-11-23 15:02:13 +03:00
Alibek Omarov
689e29bc42 engine: client: only load paused icon when requested 2024-11-23 15:01:50 +03:00
Alibek Omarov
b316af13d6 engine: client: only load tile image when requested 2024-11-23 15:01:50 +03:00
Alibek Omarov
e7f939c87b engine: always add .wad extension to wadlist names to simplify how it's being used 2024-11-23 14:01:09 +03:00
Alibek Omarov
b94446161e filesystem: add functions to directly look up into archives 2024-11-23 13:56:53 +03:00
Alibek Omarov
567cf44111 filesystem: wad: remove unused variable in FS_FindFile_WAD 2024-11-23 13:56:25 +03:00
SNMetamorph
9244bdc7db ref: gl: added gl_fog cvar for better GoldSrc compatibility 2024-11-21 23:11:53 +03:00
Alibek Omarov
0db2597d1e engine: platform: psvita: try to explicitly export strtok() function 2024-11-21 05:31:43 +03:00
Alibek Omarov
744d5d1141 ci: include proguard mapping files archive 2024-11-20 17:05:46 +03:00
Alibek Omarov
778315da5f android: let's implement proguard rules for SDL2 2024-11-20 17:05:46 +03:00
Alibek Omarov
1acda22ad4 android: CMakeLists: try to build smaller SDL2 2024-11-20 12:55:26 +03:00
Alibek Omarov
4cb1f69475 android: remove unrelated readme file 2024-11-20 12:42:56 +03:00
Alibek Omarov
f1806cbf2e android: add SDL classes and some engine methods to proguard rules file 2024-11-20 12:41:38 +03:00
Alibek Omarov
a4beb7d493 android: remove fastlane, as we don't really need it anymore 2024-11-20 12:05:58 +03:00
Alibek Omarov
880ae0fe7c android: change default arguments to -console -log, as -dev enables cheats which may be undesired for users 2024-11-20 10:36:53 +03:00
Alibek Omarov
cd3cc7e696 android: FileCopyWorker: implement simple progress tracking 2024-11-20 10:36:24 +03:00
Alibek Omarov
9e9a9847fc android: fix xash-extras assets path 2024-11-20 08:49:42 +03:00
Alibek Omarov
cb5f5baa2b Revert "wscript: as an experiment, add -pipe flag for better compilation speeds"
This reverts commit 6bfa5ce600.
2024-11-20 08:13:02 +03:00
Alibek Omarov
edef41fb71 ci: android: fix deploying APK to artifacts 2024-11-20 08:08:35 +03:00
Alibek Omarov
6bfa5ce600 wscript: as an experiment, add -pipe flag for better compilation speeds 2024-11-20 08:08:16 +03:00
Alibek Omarov
d1f70bfe2c scripts: waifulib: cmake: filter out -MMD compiler flag from generated CMake flags 2024-11-20 07:53:12 +03:00
Alibek Omarov
a56f512dc3 ci: fix signing Android APK 2024-11-20 07:43:17 +03:00
Alibek Omarov
7c88fd0a17 ci: android: fix SDL unpacking once again 2024-11-20 07:33:06 +03:00
Alibek Omarov
bec23c6d57 ci: don't run Gradle Daemon to not waste time 2024-11-20 07:31:54 +03:00
Alibek Omarov
81197b1aa4 android: bump NDK to r27c 2024-11-20 07:29:36 +03:00
Alibek Omarov
8205e22465 ci: android: fix SDL unpack, don't waste time installing NDK, gradle will do it 2024-11-20 07:29:21 +03:00
Alibek Omarov
8407af17f4 android: don't add verbose flags to waf, fix SDL path on CI 2024-11-20 07:23:40 +03:00
Alibek Omarov
22fef6fa36 android: add forgotten CMakeLists.txt 2024-11-20 07:15:50 +03:00
Alibek Omarov
88f91d3959 ci: download SDL release tarball for Android 2024-11-20 07:04:47 +03:00
Alibek Omarov
b63abe1cf2 android: use correct build flavor 2024-11-20 06:56:58 +03:00
Alibek Omarov
cd3dc78d4d Include android project into the sources 2024-11-20 06:32:16 +03:00
Alibek Omarov
ddf5a01dfc 3rdparty: MultiEmulator: update 2024-11-20 06:32:16 +03:00
Alibek Omarov
10e8790311 filesystem: VFileSystem009: fix missing override keyword on a virtual method 2024-11-20 06:32:16 +03:00
Alibek Omarov
f04a26901c Add 'android/' from commit 'add509bf9ebaa488e2afe2cdc158a0e6725cd654'
git-subtree-dir: android
git-subtree-mainline: b9f4f1eba4
git-subtree-split: add509bf9e
2024-11-20 05:31:39 +03:00
Alibek Omarov
b9f4f1eba4 engine: client: fix engine features masking for 48 and 49 protocol 2024-11-20 04:16:44 +03:00
Alibek Omarov
8b0d49f036 ci: update SDL2 to 2.30.9 2024-11-18 20:03:34 +03:00
Alibek Omarov
e94a2c900f ci: use macos-13, as macos-12 is deprecated by GitHub 2024-11-18 19:55:32 +03:00
Alibek Omarov
bfb84a7ac4 ci: rework Linux build scripts, allow crosscompiling with whatever is included in Ubuntu 20.04 (which is used on GitHub Actions now) repositories 2024-11-18 19:55:32 +03:00
Alibek Omarov
fa272d9d93 public: add optional feature for COM_ParseFileSafe to ignore shell like hash symbol prefixed comments 2024-11-18 14:14:49 +03:00
Alibek Omarov
87f0217588 engine: client: add cl_showcmd, yet another debugging aid to print current usercmd state 2024-11-18 10:42:39 +03:00
Alibek Omarov
c4f71f1a44 engine: client: remove unncesseray int <-> qboolean branch in CL_GetMessage 2024-11-18 10:42:39 +03:00
Alibek Omarov
af332eb8ac engine: client: validate dem_usercmd size before reading it into the buffer 2024-11-18 10:42:39 +03:00
Alibek Omarov
ac6dc2c2d3 engine: platform: directly call __NR_gettid syscall for compatibility with older systems 2024-11-18 10:42:39 +03:00
Alibek Omarov
a29b6772b9 engine: mod_bmodel: fix wadlist, wad file names don't have an extension there 2024-11-18 04:53:48 +03:00
Alibek Omarov
3691f02359 public: crtlib: make Q_strchrnul return non-const pointer, like strchr 2024-11-17 13:56:31 +03:00
Alibek Omarov
622d88eeba engine: client: only check active tempentities when detaching player following tents 2024-11-17 13:38:14 +03:00
Alibek Omarov
56c19c4f5a engine: client: make some simple functions, like querying entity by index, getting local player, inline 2024-11-17 13:37:32 +03:00
Alibek Omarov
c5471fe6fd engine: server: make SV_IsPlayerIndex and SV_HavePassword inline 2024-11-17 13:36:40 +03:00
Alibek Omarov
046b1da8a8 ref: fix some possible off by one errors 2024-11-17 13:26:03 +03:00
Alibek Omarov
8fd5a5af96 filesystem: simplify ambient number bound check 2024-11-17 13:04:44 +03:00
Alibek Omarov
229f1560b0 engine: fix some possible off by one errors 2024-11-17 13:04:20 +03:00
Alibek Omarov
8f7f311f60 engine: mod_bmodel: simplify wadlist parser 2024-11-17 06:28:02 +03:00
Alibek Omarov
721c8043f1 public: optimize COM_FileExtension 2024-11-17 06:20:52 +03:00
Alibek Omarov
31a86d8af2 engine: use new Q_splitstr to work with single character delimited strings 2024-11-17 05:35:36 +03:00
Alibek Omarov
ac7617990a public: add Q_splitstr function 2024-11-17 05:34:29 +03:00
Alibek Omarov
0813d2c7ce engine: mod_bmodel: merge Mod_LoadColoredLightmap and Mod_LoadDeluxemap into a single function 2024-11-17 04:59:52 +03:00
Alibek Omarov
0ceb0d9e11 engine: provide compatible replacement for CompareFileTime function 2024-11-17 04:33:13 +03:00
Alibek Omarov
30db748dcb engine: net_http: don't consider EISCONN an error, just proceed to next step 2024-11-17 03:13:39 +03:00
Alibek Omarov
399d549d0c engine: net_ws: request Winsock 2 2024-11-17 03:13:39 +03:00
Alibek Omarov
77fb2d0eb2 engine: net_ws: fix misleading error when comparing IPv6 addresses 2024-11-15 16:41:42 +03:00
Alibek Omarov
ea88bb88b2 engine: add secondary master server 2024-11-15 15:25:40 +03:00
Alibek Omarov
190e4a5e8a engine: client: don't kill entity's beams if this entity number was never used on client
Fixes issue when beam was sent over to client before it's start point entity
(due to PVS, for example)
2024-11-15 08:07:21 +03:00
Alibek Omarov
823dc3d46f engine: net_http: don't consider EALREADY on connect() an error 2024-11-14 22:55:27 +03:00
Alibek Omarov
779cb2f721 engine: server: use calloc in SV_AllocString, allocate strings at stringspool preventing memory leaks. Fix strings deduplication on 64-bits. 2024-11-13 23:36:53 +03:00
Alibek Omarov
88c42d50f2 engine: server: always allocate svgame.stringspool, it's used to track temp string allocations like in SV_CopyString
Potentially fixes memory leakage on 64-bit when game uses instanced baselines or consistency lists
2024-11-13 23:35:45 +03:00
Alibek Omarov
a749bb8ef1 engine: server: reset str64 statistics on server deactivate 2024-11-13 23:32:05 +03:00
Alibek Omarov
723cd8e26c engine: server: adjust 64-bit string pool size depending on max_edicts value (65k for each 1024 edicts) 2024-11-13 23:30:54 +03:00
Alibek Omarov
a6592e7776 public: add test to check that pair Q_buildos and Q_buildarch return expected (for this build) data 2024-11-12 21:24:48 +03:00
Alibek Omarov
4342689e73 engine: net_http: fix build with dedicated server 2024-11-12 14:46:06 +03:00
Alibek Omarov
8a2a7d1180 engine: rework how HTTP finite-machine works, use function pointers instead of enum. Preliminary chunked transfer and compression support. (#1862) 2024-11-11 10:30:15 +03:00
Vladimir
199e226758 Documentation updates and additions (#1875)
* Documentation: actualize and prettify entity tools instructions

* Documentation: added article about NAT bypass feature

* Documentation: updated GoldSrc protocol support article
2024-11-11 10:29:24 +03:00
Alibek Omarov
16ed6cbdcb engine: mark some functions as never returning nullptr 2024-11-07 16:11:58 +03:00
Alibek Omarov
b51d1a4e2e public: mark some functions as never returning nullptr 2024-11-07 16:11:40 +03:00
Alibek Omarov
534adc9630 common: xash3d_types: add returns nonnull attribute 2024-11-07 15:46:10 +03:00
Alibek Omarov
d15949d2e8 Rename _format to FORMAT_CHECK 2024-11-07 14:24:07 +03:00
Alibek Omarov
43609bc77c mainui: update 2024-11-07 14:12:21 +03:00
Alibek Omarov
3917e096ea engine: client: the most important change since forever, move downloading message a bit to the right so it looks better on 640x480 2024-11-07 14:12:10 +03:00
Alibek Omarov
d1a571201b engine: client: s_mix: attempt to fix S_InterpolateCubic2x buffer overflow 2024-11-07 14:12:10 +03:00
Alibek Omarov
8a8cdd2927 engine: client: another possible null pointer dereference 2024-11-07 14:12:10 +03:00
Alibek Omarov
3ef4acecb5 Documentation: ports: clarify support for some merged but not tested ports. Add Dreamcast port repository by @maximqaxd 2024-11-07 11:23:21 +03:00
Alibek Omarov
e8c1fc958f mainui: update 2024-11-07 10:18:16 +03:00
Alibek Omarov
08bc4ccec4 3rdparty: opus: wscript: implement looking for C99 VLA or alloca 2024-11-07 10:15:19 +03:00
Alibek Omarov
6ae62e3bb1 engine: platform: posix: include sys/filio.h to have FIONBIO declaration for networking code 2024-11-07 07:42:07 +03:00
Alibek Omarov
397f2f208a engine: wscript: link libsocket on Solaris 2024-11-07 07:41:37 +03:00
Alibek Omarov
8bebf698ef ref: fix out of bound access when the entity is marked as player but has invalid number
It's possible when client.dll passes a self allocated entity and wants to draw
it as player but doesn't initialize or set the entity number correctly.
2024-11-07 07:18:14 +03:00
Alibek Omarov
6a2a2c33ee engine: client: don't go out of bounds if studio model don't have any sequences
Fixes models/null.mdl in Master Sword Rebirth. It's technically a valid model, though
completely useless for renderer.
2024-11-07 07:13:20 +03:00
Alibek Omarov
0adda483c5 public: add definitions for Solaris 2024-11-07 07:12:30 +03:00
Alibek Omarov
d8eb918cea filesystem: rename IVFileSystem009 to IFileSystem to avoid UBsan errors when debugging a mod that calls this interface using original headers 2024-11-06 19:46:22 +03:00
Alibek Omarov
96b95db7c8 filesystem: compile with rtti, but still disable exceptions 2024-11-06 19:46:22 +03:00
Alibek Omarov
b1915106b0 vgui_support: update 2024-11-06 19:46:22 +03:00
Alibek Omarov
0d2a8488ae engine: client: replace illegal for infostring characters in server info got from TSource Engine Query 2024-11-06 19:46:22 +03:00
Alibek Omarov
a52c8aa291 ref: soft: as an experiment, reformat ref_soft as it's easier to notice config inaccuracies 2024-11-06 02:41:38 +03:00
Alibek Omarov
fbbafb45a3 Add uncrustify config file [skip ci] 2024-11-06 02:40:26 +03:00
Alibek Omarov
659adca473 ref: soft: remove dead, commented out code 2024-11-06 02:17:06 +03:00
Alibek Omarov
38e8a581b6 engine: server: fix possible NULL dereference 2024-11-06 01:39:46 +03:00
Alibek Omarov
06e476e8c8 engine: reorder mstudiocache_t fields for better memory efficiency 2024-11-06 01:39:46 +03:00
Alibek Omarov
f529f06ea1 engine: use designated initializers to define BSP lumps. Reorder mlumpinfo_t for better memory efficiency 2024-11-06 01:39:46 +03:00
Alibek Omarov
159ded433d ref: gl: don't touch polygon offset when not drawing debug hulls as it breaks decals with VBO
Also correctly restore polygon offset state so decals gets drawn even with VBO
2024-11-06 01:39:46 +03:00
Alibek Omarov
c3b6422ad0 engine: common: add lzss fixes by nillerusr 2024-11-06 01:39:46 +03:00
Alibek Omarov
41b78c26ef engine: client: s_vox: fix incorrect check in VOX_FreeWord 2024-11-06 01:39:46 +03:00
Alibek Omarov
ca93c5b666 engine: client: touch: use FillRGBA to draw edit grid 2024-11-06 01:39:46 +03:00
Alibek Omarov
80f8b778a9 engine: client: cl_tent: more accurate R_FizzEffect 2024-11-06 01:39:46 +03:00
Alibek Omarov
8c5db5f980 engine: client: turn some asserts in texture remap code into proper nullptr checks 2024-11-06 01:39:46 +03:00
Alibek Omarov
3756361cfe engine: client: fix possible NULL dereference when setting up bbox for non-solid visent that somehow doesn't have a model 2024-11-06 01:39:46 +03:00
Alibek Omarov
5f3e167799 engine: client: prevent possible null dereference with malformed consistency info packet 2024-11-06 01:39:45 +03:00
Alibek Omarov
b7ed779f71 public: mathlib: fix incorrect usage of DotProductAbs, it will give the integer result, while float is expected 2024-11-06 01:39:45 +03:00
Alibek Omarov
fa6f564c12 engine: client: allow extended amount of commands to be sent for newer GoldSrc server. Also refactoring 2024-11-06 01:39:45 +03:00
Alibek Omarov
ad457f717b engine: client: no sense to check for position history pointers for NULL in CL_FindInterpolationUpdates, as they never are 2024-11-06 01:39:45 +03:00
Alibek Omarov
f95ce7f52d engine: client: cl_font: fix possible NULL dereference 2024-11-06 01:39:45 +03:00
Alibek Omarov
ec73f23e4a engine: client: rewrite R_RocketTrail for accuracy and fix potential uninitialized vectors 2024-11-05 17:43:09 +03:00
Alibek Omarov
2972d7c309 wscript: disable enum-float-conversion on clang 2024-11-03 04:24:54 +03:00
Alibek Omarov
4d003bc13f ref: remove Mod_LoadMapSprite from RefAPI 2024-11-03 02:59:44 +03:00
Alibek Omarov
4cb11861e4 engine: client: reimplement Mod_LoadMapSprite on engine side 2024-11-03 02:58:31 +03:00
Alibek Omarov
addd50467e engine: remove FillRGBABlend from RefAPI. FillRGBA now accepts rendermode parameter 2024-11-03 02:24:36 +03:00
Alibek Omarov
6cd2dbf178 engine: remove R_DrawTileClear from RefAPI 2024-11-03 02:21:38 +03:00
Alibek Omarov
f079e63737 engine: client: reimplement R_DrawTileClear on engine-side 2024-11-03 02:19:49 +03:00
Alibek Omarov
d807041aa5 engine: client: register sound cvars even if audio was disabled 2024-11-03 01:20:30 +03:00
Alibek Omarov
6153d7f168 engine: make CL_RunLightStyles accept lightstyles array pointer as an argument. Make necessary changes in renderers. 2024-11-03 01:20:30 +03:00
Alibek Omarov
e37feece4d engine: finally remove GetLightStyle, GetDynamicLight and GetEntityLight from RefAPI 2024-11-03 01:20:30 +03:00
Alibek Omarov
6cf11cb6cf ref: soft: migrate to new way to get lightstyles and dlights 2024-11-03 01:20:30 +03:00
Alibek Omarov
bb4e64ea58 ref: gl: migrate to new way to get lightstyles and dlights 2024-11-03 01:20:30 +03:00
Alibek Omarov
9ed55776a9 engine: add PARM_GET_*_PTR for lightstyles and dlights arrays 2024-11-03 01:20:30 +03:00
Alibek Omarov
b45bc9af67 engine: remove gamma functions from RefAPI 2024-11-03 01:20:30 +03:00
Alibek Omarov
2227e487c0 engine: client: explicitly set rendermode for R_ShowTree 2024-11-03 01:20:30 +03:00
Alibek Omarov
1f49ce599f engine: client: fix out of bound read in gamma table access functions 2024-11-03 01:20:30 +03:00
Alibek Omarov
8af995cc28 engine: introduce REF_GET_*_PTR for gamma tables 2024-11-03 01:20:30 +03:00
Alibek Omarov
b39d660189 ref: refactor R_BuildLightMap 2024-11-03 01:20:30 +03:00
Alibek Omarov
9608da5bf9 engine: move debug hulls rendering from renderer, implement through TriAPI
Bump RefAPI version to 9.
2024-11-02 22:57:26 +03:00
Alibek Omarov
d3adcf3185 ref: soft: fix misplaced lightmaps 2024-11-02 04:09:04 +03:00
Alibek Omarov
40c051fb6b ref: refactor R_AddDynamicLights 2024-11-02 04:08:40 +03:00
Alibek Omarov
015f1ba8c0 ref: gl: small optimization for brush model rendering passes, track the first and last texture id of a special surface (fullbrights, alpha chains, details..) 2024-11-02 03:24:54 +03:00
Alibek Omarov
c3de4a5c3b ref: gl: add fullbright textures to the list with VBO renderer 2024-11-02 02:18:43 +03:00
Alibek Omarov
09210e4316 wscript: add option to build with extended msurface_t from HL25 2024-11-02 02:16:59 +03:00
Alibek Omarov
93b382f174 wscript: move SUPPORT_BSP2_FORMAT definition to the main wscript file. Manually define REF_DLL in the build task 2024-11-02 01:57:33 +03:00
Alibek Omarov
42cf51c6aa wscript: don't look for amd64_x86 MSVC crosscompiler when using msvc-wine 2024-11-02 01:55:35 +03:00
Alibek Omarov
f7bc258c2f ref: gl: reduce copypasted branch at LM_UploadBlock 2024-11-01 19:06:09 +03:00
Alibek Omarov
9e1908fc6f engine: client: rewrite stupid comma separated single-line operations into more sane code 2024-10-30 22:01:41 +03:00
Alibek Omarov
6bdb3f6ea1 engine: don't save fps_override value as it's an experimental feature 2024-10-30 19:26:37 +03:00
Alibek Omarov
2fe94bceb6 engine: limit framerate during connection to GoldSrc servers to exactly 31 FPS, like GoldSrc 2024-10-30 19:25:48 +03:00
Alibek Omarov
371639f0dc engine: introduce fps_override to unlock the 200 FPS limit in multiplayer games to 1000 2024-10-30 18:28:55 +03:00
Alibek Omarov
f88d424ecd engine: client: don't make useless comparison, cl_cmdrate is always clamped between 10 and 100. 2024-10-30 18:16:47 +03:00
Alibek Omarov
c2ca80c889 engine: client: don't immediately send client packet after receiveing server packet or full update
It doesn't seem to be useful for anything. Instead, it completely breaks cl_cmdrate behavior, constantly
spamming server with move commands
2024-10-30 18:11:48 +03:00
Alibek Omarov
0313e19674 filesystem: strip upper directory access from FS_FindFile when FS_AllowDirectPath is set to true
Detailed explanation is available in the code comments.
2024-10-29 16:13:31 +03:00
Alibek Omarov
281d4359d0 Upgrade Freedesktop SDK to 24.08 2024-10-29 16:13:31 +03:00
Alibek Omarov
7b02c37fa7 engine: add generated by version line to the config and help.txt files
Remove an attempt to copyright generated files came from the original Xash3D.
2024-10-29 16:13:31 +03:00
Alibek Omarov
2ea0b0d60c engine: client: fix fire field additive transparency from 80 to 180 (thanks @autisoid!) 2024-10-28 20:13:52 +03:00
Alibek Omarov
d879e028cf engine: soundlib: snd_wav: fix clang warning 2024-10-28 15:32:25 +03:00
Alibek Omarov
3e7e81e078 engine: platform: android: sprinkle it with more const modifiers 2024-10-28 14:32:57 +03:00
Max Parry
cc53d59532 gha: adds SDL2 to OSX builds (resolves #1791) (#1855)
* updated build_apple.sh to copy over SDL2 from the Frameworks folder that it was installed in by dep_apple.sh
2024-10-28 12:58:46 +03:00
Alibek Omarov
319dea1f7d mainui: update 2024-10-28 12:22:10 +03:00
Alibek Omarov
48047c05b7 extras: update 2024-10-28 12:22:10 +03:00
Alibek Omarov
85b0273911 engine: client: check resource nIndex before writing it to the precache arrays 2024-10-28 12:22:10 +03:00
Alibek Omarov
eb72b6baee ref: gl: fix r_shadows and gl_vbo registration order. It must be registered before reading renderer config 2024-10-28 02:10:24 +03:00
Alibek Omarov
422addcbb6 public: make Q_atoi_hex public, check for 0x prefix 2024-10-28 02:09:05 +03:00
Alibek Omarov
4a58be2aa0 ref: gl: deregister timerefresh command in renderer, as it's renderer-specific 2024-10-28 01:59:39 +03:00
Alibek Omarov
562b54839c engine: client: console: fix printing multiline messages with CRLF, like HTTP headers 2024-10-28 01:58:47 +03:00
Alibek Omarov
639eaa9416 engine: split HTTP client into a separate file 2024-10-27 17:07:35 +03:00
Alibek Omarov
6c6cb65b30 mainui: update 2024-10-27 14:33:27 +03:00
Alibek Omarov
8ea8437e19 3rdparty: opus: downgrade to 1.4.0 2024-10-27 14:32:43 +03:00
Alibek Omarov
2656eb1aeb engine: fix A2S_GOLDSRC_INFO, it must always include Source Engine Query and a null terminator 2024-10-26 20:24:31 +03:00
Alibek Omarov
fa1e92b127 engine: request file from server if HTTP locations failed 2024-10-26 20:24:31 +03:00
Alibek Omarov
cff8ee13e6 engine: rcon refactoring. Use sizebuf_t to concatenate commands. Only call redirect when we're executing command. 2024-10-26 19:37:30 +03:00
Alibek Omarov
3956e3863e engine: make Netchan_TransmitBits accept const data 2024-10-26 19:19:37 +03:00
Alibek Omarov
9600218757 engine: client: send tempdecal.wad to GoldSrc servers 2024-10-26 19:16:59 +03:00
Alibek Omarov
2db7cb0d64 engine: client: when validating, we're supposed to send move and delta commands 2024-10-26 19:12:52 +03:00
Alibek Omarov
267a70d621 engine: common: don't print svc/clc_nop with net_recv/send_debug 2024-10-26 05:18:09 +03:00
Alibek Omarov
667bedab82 engine: client: allow reading upper directories for clc_fileconsistency. Initialize md5 digest, add note about servers relying on uninitialized md5 value in some cases. 2024-10-26 05:17:24 +03:00
Alibek Omarov
49990a0859 mainui: update 2024-10-26 05:15:55 +03:00
Alibek Omarov
f7c4cd9398 engine: client: allow case-insensitive goldsrc proto argument in connect and queryserver commands 2024-10-26 05:15:46 +03:00
Alibek Omarov
cd4f4d5ad4 engine: common: fix hpkextract command 2024-10-26 05:15:09 +03:00
Alibek Omarov
fe429fe213 engine: common: net_ws: fix HTTP request when server have custom port and/or doesn't have slash at the end of URL. Set Accept: */* just in case. 2024-10-26 05:14:51 +03:00
Alibek Omarov
0a24ca3fe2 engine: client: fix svc_updateuserinfo for inactive player on GoldSrc servers 2024-10-26 05:13:22 +03:00
Alibek Omarov
8c93a0d247 engine: client: allow playing back demos recorded on GoldSrc servers 2024-10-26 05:12:11 +03:00
Alibek Omarov
5c75dda864 mainui: update 2024-10-26 02:42:30 +03:00
Alibek Omarov
55bdded6a4 engine: add pfnIsCvarReadOnly to mainui API 2024-10-25 05:09:02 +03:00
Alibek Omarov
25b2c0f7e3 ref: gl: use FCVAR_GLCONFIG on VBO and detail textures cvars, so it always gets saved to opengl.cfg 2024-10-24 23:31:16 +03:00
Alibek Omarov
ed522852cf mainui: update 2024-10-24 23:30:23 +03:00
Alibek Omarov
224e42d345 engine: platform: android: make dlsym-weak C++ again (because of struct soinfo definition). Reformat linker.h file as well. 2024-10-24 17:54:09 +03:00
Alibek Omarov
128a1f59a9 engine: cleanup XASH_64BIT usage. Always use it from build.h 2024-10-24 16:39:09 +03:00
Alibek Omarov
40ffde0439 3rdparty: opus: update to 1.5.2 2024-10-24 15:51:41 +03:00
Alibek Omarov
ec5578a437 ref: gl: vgl_shim: remove -fno-PIC to properly link it with shared library 2024-10-24 15:47:06 +03:00
Alibek Omarov
1cf40a2d17 engine: wscript: remove useless globs 2024-10-24 15:46:33 +03:00
Alibek Omarov
958ea0ac1d scripts: gha: temporarily enable verbose build output for PSVita 2024-10-24 02:05:47 +03:00
Alibek Omarov
a9fdae28b2 engine: platform: android: reformat dlsym-weak and make it C only 2024-10-24 02:04:52 +03:00
Alibek Omarov
3d9eb869b0 ci: fix netbsd bzip2 package name 2024-10-24 00:57:18 +03:00
Alibek Omarov
8162c6d42f scripts: waifulib: xshlib: prepend xshlib so it's always first 2024-10-24 00:46:43 +03:00
Alibek Omarov
48a9f17222 filesystem: only export GetFSAPI, CreateInterface is useless with static linking (and should be implemented differently) 2024-10-24 00:40:47 +03:00
Alibek Omarov
e381d04094 ref: simplify wscripts, remove gl2_shim unused wscript, fix non-existent export in exports.txt 2024-10-24 00:40:12 +03:00
Alibek Omarov
0e79326571 waf: upgrade to latest, fix for api changes 2024-10-24 00:37:05 +03:00
Alibek Omarov
f7eb8cd913 engine: wscript: ensure we always add needed features when mixing C and C++ objects. Simplify bld call for all platforms 2024-10-23 23:22:23 +03:00
Alibek Omarov
a15c1f99b2 wscript: remove useless features 2024-10-23 23:20:47 +03:00
Alibek Omarov
ba2191172d ci: add bzip2 for sourcehut CI 2024-10-23 20:25:26 +03:00
Alibek Omarov
6ab2c9dbbf engine: client: fix out of bounds access with some ticket generators
* Update MultiEmulator submodule
2024-10-22 02:13:36 +03:00
Alibek Omarov
7da460d4b1 public: bump miniz to latest release 2024-10-21 21:22:50 +03:00
Alibek Omarov
ffe7b1f4a1 3rdparty: MultiEmulator: move it to submodule 2024-10-21 14:08:16 +03:00
Alibek Omarov
6a1f502d25 3rdparty: MultiEmulator: remove unused code 2024-10-21 06:30:53 +03:00
Alibek Omarov
434359ea01 3rdparty: update mainui and extras 2024-10-21 06:19:11 +03:00
Alibek Omarov
ae2ad6ddf2 3rdparty: add MultiEmulator by 2010kohtep
* patched to be portable, turned into a static library
* integrated to the engine
2024-10-21 06:19:11 +03:00
Alibek Omarov
ec11683dc5 engine: client: minor fix, reference cl_allowdownload cvar actual name 2024-10-21 04:49:25 +03:00
Alibek Omarov
47318b0c14 engine: server: minor fix, use __func__ instead of the function name in debug message 2024-10-21 02:32:07 +03:00
Alibek Omarov
60d6214ad7 engine: client: implement parsing GoldSrc server query response for mainui_cpp 2024-10-21 02:31:45 +03:00
Alibek Omarov
a3e26a21a7 engine: common: net_chan: as we expect pfnBlockSize to be always set, use it to determine if netchan was initialized or not 2024-10-21 02:30:49 +03:00
Alibek Omarov
d0f3a6f74b engine: client: add command queryserver for mainui to query a specific address. Make server querying commands restricted 2024-10-20 02:22:09 +03:00
Alibek Omarov
fee236a050 engine: common: net_ws: make NET_IsLocalAddress inline 2024-10-19 14:08:27 +03:00
Alibek Omarov
e3e4bcc015 engine: global refactoring of connectionless packets, now they can be customized from single protocol.h header 2024-10-19 14:05:00 +03:00
Alibek Omarov
2d546ccbf7 engine: implement CL_MsgInfo for dedicated server 2024-10-18 03:13:43 +03:00
Alibek Omarov
b41804bb5b mainui: update 2024-10-17 14:56:38 +03:00
Alibek Omarov
47a04df189 wscript: try to fix Windows XP compatibility on 32-bit binaries 2024-10-17 14:56:10 +03:00
Alibek Omarov
2efedaf46c pm_shared: mark PM_TraceSurface call in PMove API as Xash3D specific 2024-10-17 03:36:29 +03:00
Alibek Omarov
49e43c830b engine: client: fix formatting error in CL_ParseExtraInfo 2024-10-16 22:29:21 +03:00
Alibek Omarov
763e101208 ref: preserve aspect ratio when saving level and save shots 2024-10-16 21:35:52 +03:00
Alibek Omarov
e39a62b1fd mainui: update 2024-10-16 08:33:44 +03:00
Alibek Omarov
da76abda75 engine: even more refactorings to avoid global cls.legacymode usage, now with GoldSrc server autodetection 2024-10-16 07:31:27 +03:00
Alibek Omarov
829d7d0a7e engine: client: CL_SendConnectPacket refactoring 2024-10-16 07:02:23 +03:00
Alibek Omarov
9f6372b305 engine: client: implement GoldSrc fragment size limits 2024-10-16 07:00:10 +03:00
Alibek Omarov
12edd782c6 engine: common: net_chan: always rely on pfnBlockSize being non-null 2024-10-16 06:59:33 +03:00
Alibek Omarov
0b59fa9416 engine: swap Cvar_VariableInteger and simple integer checks for performance 2024-10-16 06:57:46 +03:00
Alibek Omarov
cc0f12ed26 engine: client: add stubs for richpresence commands added in HL25 2024-10-16 05:57:32 +03:00
Alibek Omarov
f42553d0e1 readme: install 32-bit deps on Ubuntu with aptitude, as it's less prone to fuck up entire system (remove random packages, bootloader, etc...) [skip ci] 2024-10-16 00:32:23 +03:00
Alibek Omarov
e7564420c9 engine: fix some ubsan warnings (alignment, integer limits...) 2024-10-16 00:32:22 +03:00
Alibek Omarov
e81a0ded11 engine: client: fix sendres message for GoldSrc protocol 2024-10-16 00:32:22 +03:00
Alibek Omarov
a32c702dbd engine: client: avoid useless check on empty clc_resourcelist, which will never be false 2024-10-15 06:15:22 +03:00
Alibek Omarov
23a5ed71de engine: easier MSG_EndBitWriting byte padding 2024-10-15 06:14:37 +03:00
Alibek Omarov
245dc97cfb engine: semi-correct printing GoldSrc client messages 2024-10-15 06:12:31 +03:00
Alibek Omarov
ece204c30f engine: common: add cvars net_send_debug and net_recv_debug to print server/client messages to console 2024-10-15 06:11:57 +03:00
Alibek Omarov
1bd59096fd engine: client: implement miscellaneous, often unused, GoldSrc protocol messages 2024-10-15 06:10:25 +03:00
Alibek Omarov
0b02c2c6a7 engine: client: fix disconnect on GoldSrc servers 2024-10-15 06:08:21 +03:00
Alibek Omarov
6a61a499e9 engine: client: don't send useless/empty clc_move commands while we're connecting to server 2024-10-15 06:07:57 +03:00
Alibek Omarov
6b1c283082 engine: client: fix svc_event parsing 2024-10-15 06:07:06 +03:00
Alibek Omarov
5402a9611e engine: common: fix discarded const qualifier 2024-10-14 19:41:36 +03:00
Alibek Omarov
43e06ccd45 engine: common: make some simple functions inlined 2024-10-14 19:20:47 +03:00
Alibek Omarov
f52c825bf5 engine: make some global variables static and const, make even more functions static if possible 2024-10-14 19:19:46 +03:00
Alibek Omarov
bf8b709372 engine: move pm_debug particle functions to client, as they are never used on server 2024-10-14 19:11:26 +03:00
Alibek Omarov
fdf82e5270 engine: client: cleanup tent and efx code, make global variables static, remove unused functions 2024-10-14 18:08:01 +03:00
Alibek Omarov
0224a1b66b engine: client: better debug messages for GoldSrc entities packet parsing 2024-10-14 17:59:17 +03:00
Alibek Omarov
505ad6d69b engine: server: reinitalize delta in case if delta was shutdown by client and some tables were omitted (movevars after using GoldSrc server) 2024-10-14 06:56:17 +03:00
Alibek Omarov
5bcd573821 engine: remove goldsrc meta delta table reinitialization 2024-10-14 06:54:41 +03:00
Alibek Omarov
c5a291d9c7 engine: minor refactoring 2024-10-14 05:17:21 +03:00
Alibek Omarov
232a8c1148 engine: common: net_ws: don't expect more than 5 splits for GoldSrc protocol 2024-10-14 05:17:03 +03:00
Alibek Omarov
663f6eaf5c ref: turn r_shadows into extended convar_t 2024-10-14 04:18:35 +03:00
Alibek Omarov
9d3210259c ref: set hullcolor (used by r_drawentities) as const 2024-10-14 04:15:48 +03:00
Alibek Omarov
4ec6c2f7cf engine: client: support vox sentence that starts with leading slash 2024-10-14 04:13:10 +03:00
Alibek Omarov
8452bec877 engine: client: reduce reads of cls.legacymode 2024-10-14 04:13:10 +03:00
Alibek Omarov
0d4296e0e1 engine: client: explicitly pass protocol to svc_time parser 2024-10-14 04:13:10 +03:00
Alibek Omarov
2b85da3bc9 engine: client: fix parsing svc_setpause and svc_goldsrc_timescale for GoldSrc protocol 2024-10-14 04:13:10 +03:00
Alibek Omarov
17f194b9a3 engine: client: consolidate usermsg registering and parsing for multiple protocols 2024-10-14 04:13:10 +03:00
Alibek Omarov
ff47fbaedc engine: client: another fix baselines and entities parsing for GoldSrc, ensure we always call MSG_EndBitWriting 2024-10-14 04:13:10 +03:00
Alibek Omarov
87c88f7463 engine: client: fix svc_particles parsing on GoldSrc protocol 2024-10-14 04:13:10 +03:00
Alibek Omarov
60fd5f7ab8 engine: client: stub svc_restoresound for legacy protocol, it's only used during save restore which is unuseful for us
* Set sequence flag for restored sound, even though we don't support sequences anymore.
2024-10-14 04:13:10 +03:00
Alibek Omarov
5ceab059dc engine: client: add function for parsing common protocol messages, which structure is enforced by server DLL compatibility 2024-10-14 04:13:10 +03:00
Alibek Omarov
67c898f9ad engine: client: improve server data parsing for GoldSrc, restore nick name and remove unuseful userinfo keys before connection 2024-10-14 04:13:10 +03:00
Alibek Omarov
d903187eea public: make crc value init functions inline, move hex2char/ex2string to crclib and make them private to it 2024-10-14 04:13:10 +03:00
54ac
653f0841e4 ref: gl: restore r_shadows (#1843) 2024-10-13 17:15:29 +03:00
Alibek Omarov
10bfadb556 engine: client: support svc_disconnect reason messages for GoldSrc protocol 2024-10-11 20:58:46 +03:00
Alibek Omarov
0b2cc066dd engine: fix signed integers encoding with alternate format for GoldSrc protocol 2024-10-11 20:36:09 +03:00
Alibek Omarov
60ab13d216 engine: client: always add [Xash3D] to the nickname on GoldSrc servers 2024-10-11 19:32:16 +03:00
Alibek Omarov
f90c658567 engine: client: skip voice data for GoldSrc protocol to avoid svc_bad 2024-10-11 19:31:41 +03:00
Alibek Omarov
0c54895877 engine: client: add unmunge function for consistency info for GoldSrc protocol 2024-10-11 18:41:17 +03:00
Alibek Omarov
4eb54328f8 engine: client: various connection setup fixes for GoldSrc proto
* always add "steam" to getchallenge message
* cdkey md5 should be sent with lowercase
* strip null terminator from connect message
2024-10-11 18:41:16 +03:00
Alibek Omarov
b1189db9c5 engine: client: avoid clc_move spam when we're connected but not spawned yet 2024-10-11 00:08:21 +03:00
Alibek Omarov
869578f1ba engine: client: lie about sv_version for GoldSrc protocol 2024-10-11 00:08:21 +03:00
Alibek Omarov
3320f776ce engine: client: implement correct clc_fileconsistency response for GoldSrc 2024-10-11 00:08:21 +03:00
Alibek Omarov
1d64635783 engine: correctly check for cls.legacymode, as it's not a boolean anymore 2024-10-11 00:08:21 +03:00
Alibek Omarov
bbb076c0d4 engine: client: voice: don't print about unsupported codec with empty string name 2024-10-10 23:40:23 +03:00
Alibek Omarov
fe2a4d0428 engine: common: net_encode: remove DT_SIGNED_GS flag just in case 2024-10-10 23:40:23 +03:00
Alibek Omarov
6bdc1941e6 engine: common: netchan: only compress with BZip2 when it's efficient 2024-10-10 23:40:23 +03:00
Alibek Omarov
9188905145 engine: client: fix map CRC match with GoldSrc protocol 2024-10-10 23:40:23 +03:00
Alibek Omarov
3f2fbb10d8 engine: client: only send continueloading for legacy protocol 2024-10-10 23:40:23 +03:00
Alibek Omarov
9c97235fe8 engine: client: implement GoldSrc connectionless print message 2024-10-10 23:40:23 +03:00
Alibek Omarov
70a13b47db engine: client: implement randomized cdkey for GoldSrc protocol 2024-10-10 23:40:22 +03:00
Alibek Omarov
18afaf0eaf engine: client: more accurate clc_move for GoldSrc protocol 2024-10-10 23:38:55 +03:00
Alibek Omarov
8b8c3d8116 scripts: waifulib: xcompile: define WebAssembly target as DEST_OS wasi 2024-10-10 16:13:54 +03:00
Alibek Omarov
514fc9fe43 public: reserve identifier for WebAssembly port 2024-10-10 16:13:20 +03:00
Alibek Omarov
5d8923d69c scripts: waifulib: sdl2: fix build on macOS 2024-10-10 15:44:32 +03:00
Alibek Omarov
5db880af57 engine: wscript: add an ability to build with SDL3 2024-10-10 06:13:56 +03:00
Alibek Omarov
c05db9ce58 waf: upgrade waifu to latest master 2024-10-10 06:13:32 +03:00
Alibek Omarov
04079abe00 scripts: waifulib: re-export sdl2.py from waifu repository, add sdl3 compatibility 2024-10-10 06:13:23 +03:00
Alibek Omarov
8054b69f73 readme: add GoldSrc protocol support, add RedHat/Fedora build instructions, better wording [skip ci] 2024-10-10 01:58:56 +03:00
SNMetamorph
b5ee777466 Documentation: added article about GoldSrc network protocol support 2024-10-10 01:52:44 +03:00
Alibek Omarov
96f3061709 ref: gl: show texture size in memory, skip empty pages, skip empty 0-th texture 2024-10-09 02:44:26 +03:00
Alibek Omarov
420c5a4ff3 ref: gl: set numeric value for wrappers macros, similar to build.h macros 2024-10-09 02:01:10 +03:00
Alibek Omarov
e8f6476e8c ref: gl: patch to compile with nanogl (nanogl doesn't impement glTexCoord3f) 2024-10-09 00:31:05 +03:00
Alibek Omarov
65ec35b732 engine: client: fix bug in temp entity parsing caused by find and replace 2024-10-08 23:02:02 +03:00
Alibek Omarov
8d731b5d15 engine: common: fix for dedicated again 2024-10-08 16:41:25 +03:00
Alibek Omarov
38c0dc4551 3rdparty: bzip2: properly use stdio-free version, don't include tests and utils to the build 2024-10-08 15:39:56 +03:00
Alibek Omarov
4d8cb0469f scripts: gha: build Linux binaries with bundled deps, to avoid external dependency on libbz2 2024-10-08 13:09:34 +03:00
Alibek Omarov
62cb8f5ba6 3rdparty: bzip2: forgot to add actual bz_version.h file 2024-10-08 13:07:42 +03:00
Alibek Omarov
97c75d96d5 3rdparty: bzip2: build with BZ_NO_STDIO 2024-10-08 13:06:02 +03:00
Alibek Omarov
f5ae806b31 ref: gl: add r_showtextures implementation by ncuxonaT
Main changes made by me besides engine differences:
* Text color changed to pure white for better readability
* An attempt to draw texture name in full size
2024-10-08 12:56:07 +03:00
Alibek Omarov
482dc3a5a5 engine: client: fix joining current protocol servers 2024-10-08 12:43:29 +03:00
Alibek Omarov
a8539ac004 3rdparty: bzip2: add pre-generated bz_version.h header as some generators (like cmake.py) don't understand subst yet 2024-10-08 12:27:41 +03:00
Alibek Omarov
9970c56218 engine: common: disable bzip2 for dedicated server, it's not used there 2024-10-08 12:14:37 +03:00
Alibek Omarov
480218412a engine: client: remove voidptr hack from IN_EngineAppendMove, just use usercmd_t directly 2024-10-08 04:07:03 +03:00
Alibek Omarov
6ae09d2866 engine: client: support GoldSrc signon and refactor parsing delta entities for current and legacy protocols 2024-10-08 04:07:03 +03:00
Alibek Omarov
609680b328 engine: client: support parsing GoldSrc event messages 2024-10-08 04:07:03 +03:00
Alibek Omarov
ccbe370c8e engine: client: add support for parsing GoldSrc messages 2024-10-08 04:07:03 +03:00
Alibek Omarov
9706e47643 engine: client: refactor and implement GoldSrc-specific parsing bits in common message parsing code 2024-10-08 03:28:02 +03:00
Alibek Omarov
d98361f782 engine: client: add support for parsing GoldSrc svc_temp_entity 2024-10-08 03:28:02 +03:00
Alibek Omarov
ba7c789ec9 engine: common: add GoldSrc delta support 2024-10-08 03:28:02 +03:00
Alibek Omarov
d128997d40 engine: common: add GoldSrc bitbuf operations, add support for GoldSrc signed integers 2024-10-08 03:28:02 +03:00
Alibek Omarov
61342547ce engine: common: add support for GoldSrc split packet 2024-10-08 03:28:02 +03:00
Alibek Omarov
c1a5f173b8 engine: common: add GoldSrc netchan support 2024-10-08 03:28:02 +03:00
Alibek Omarov
f5c5b7b2c8 engine: common: add buffer munge functions 2024-10-08 03:28:02 +03:00
Alibek Omarov
057b47555d 3rdparty: bzip2: add wscript for bzip2, check for system-wide bzip2, add readme note 2024-10-08 03:28:02 +03:00
Alibek Omarov
43299f6747 3rdparty: add bzip2 submodule 2024-10-08 03:28:02 +03:00
Alibek Omarov
03bf6cb719 engine: client: get rid of PROTOCOL_GOLDSRC_VERSION, as connprotocol_t enum does it's job 2024-10-08 03:27:32 +03:00
Alibek Omarov
3a1bb12830 engine: client: rename CL_LegacyMode to CL_Protocol 2024-10-08 03:27:09 +03:00
Alibek Omarov
5efa68757e engine: remove unused svc_deltapacketbones 2024-10-08 03:27:09 +03:00
Alibek Omarov
afaf5bf3ea engine: improve security a little bit by properly checking customization files starting with \!MD5
Implement basic test for COM_IsSafeFileToDownload

Move COM_ParseFileSafe test to libpublic
2024-10-08 03:22:53 +03:00
SNMetamorph
50c805826f engine: implemented handling SIGTERM signal for proper stopping dedicated server 2024-10-08 01:05:26 +03:00
Alibek Omarov
35ae9f4a64 engine: client: don't save thirdperson value, it's not used anywhere 2024-10-07 21:00:16 +03:00
Alibek Omarov
d7d96c02a2 engine: client: implement cvar showpause for GoldSrc compatibility 2024-10-07 20:59:44 +03:00
Alibek Omarov
dd03723144 readme: add libopus-dev to dependencies list on Debian/Ubuntu 2024-10-07 18:09:32 +03:00
xiaodo
26f07196ea engine: Format Codes. 2024-10-07 17:22:27 +03:00
xiaodo
8c291fdfe3 engine: fix CenterPrint Wrong Y Position. 2024-10-07 17:22:27 +03:00
xiaodoxd
d1e118f07c Fix CenterPrint Wrong X Position 2024-10-07 17:22:27 +03:00
Alibek Omarov
6c531c14e6 engine: common: cvar: compatibility hack for mods that depend on HL25 widescreen FOV
Fixes Natural Selection 3.3 beta 9.
2024-10-04 19:09:43 +03:00
Alibek Omarov
433213c915 engine: server: fix cvar description for mp_footsteps 2024-10-04 19:07:44 +03:00
Alibek Omarov
ab0c0b18c2 engine: server: remove limit on sv_zmax value as it breaks Natural Selection mod 2024-10-04 19:07:08 +03:00
Alibek Omarov
29fd5f9fbe engine: server: remove FCVAR_SERVER flag from sv_zmax
The problem is that FCVAR_SERVER flagged cvars get saved to listenserver.cfg.

The game code usually sets sv_zmax value to worldspawn parameters and
listenserver.cfg gets generated before server DLL gets initialized.
2024-10-04 19:04:34 +03:00
Alibek Omarov
882d8afc93 engine: server: stub SV_RestartDecals for dedicated server 2024-10-04 01:28:22 +03:00
Alibek Omarov
e11635d15c engine: server: slight refactoring, hide client calls under XASH_DEDICATED, remove useless dedicated stub 2024-10-04 01:22:59 +03:00
Alibek Omarov
5d79d93aac engine: server: use safe cvar unlinking for mods that deallocate cvars (like HL Unified SDK) 2024-10-03 15:32:14 +03:00
Alibek Omarov
7ccf651fd0 engine: cvar: implement safer cvar unlinking in case when game deallocates cvar 2024-10-03 15:32:14 +03:00
Alibek Omarov
67af41cce8 engine: common: net_ws: more minor refactoring, avoid memcpy for same type structs 2024-10-02 23:30:42 +03:00
Alibek Omarov
e2c96e62e1 engine: common: net_ws: drop IPv4 mapped as IPv6 support, it's an artifact from dual-stacking experiments and not used anymore 2024-10-02 23:26:28 +03:00
Alibek Omarov
2ecae442fc engine: common: net_ws: minor refactoring 2024-10-02 23:25:12 +03:00
Alibek Omarov
a1060b0eb5 engine: add v6only master servers, add v6only flag for NET_StringToAdrNB 2024-10-02 23:23:08 +03:00
Alibek Omarov
ddd8de888f engine: add macro XASH_NO_IPV6_RESOLVE to completely skip resolving addresses with family AF_INET6 2024-10-02 23:21:25 +03:00
Alibek Omarov
a758dffbc1 public: avoid useless copy in Q_timestamp 2024-10-02 22:18:16 +03:00
Alibek Omarov
87775faeca engine: common: properly check if we can destroy resolve mutexes. Add net_resolve_debug cvar to enable printing resolve thread debug messages. 2024-10-02 22:16:51 +03:00
Владислав Сухов
add509bf9e android: apply themed icon on Android 13+ 2024-08-01 15:08:42 +03:00
dependabot[bot]
e4bc767644 build(deps): bump rexml from 3.2.5 to 3.3.2
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.5 to 3.3.2.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.5...v3.3.2)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-25 10:33:11 +03:00
Владислав Сухов
97ab977f58 android: fix a string not fitting on some DPIs 2024-07-24 13:49:45 +03:00
David
058aca0ce3 Fix strings.xml ptbr 2024-07-23 19:25:34 +03:00
Владислав Сухов
8ab693f3fe android: added russian strings 2024-07-23 17:55:51 +03:00
Alibek Omarov
71b2232995 Remove non-translatable strings from values-pt-rBR 2024-07-17 02:29:19 +03:00
David
a2d9730c60 Update strings.xml to Portuguese brazilian 2024-07-17 02:29:19 +03:00
Alibek Omarov
4de1241713 Update HLSDK and Xash3D submodules 2024-07-09 19:53:44 +03:00
Alibek Omarov
55d78b0197 AndroidManifest: use launchMode=singleTask, so our activity gets pushed at the top of the stack. Besides, launching engine again with another engine launched in background just crashes it 2024-07-09 16:30:26 +03:00
Alibek Omarov
c3c277f03b AndroidManifest: disable unneeded configChanges, we don't care about RTL settings in-game or locale changes. Add touchscreen just in case (old port uses it somehow?) 2024-07-09 16:29:21 +03:00
Alibek Omarov
ccb687e552 xash3d-fwgs: update submodule 2024-07-08 22:25:39 +03:00
Alibek Omarov
075dbbd08b hlsdk-portable: update submodule 2024-07-08 22:24:30 +03:00
Alibek Omarov
24266c64ef SDL: update submodule 2024-07-08 22:23:57 +03:00
Alibek Omarov
f19430447a gradle: upgrade gradle and android plugin 2024-07-08 22:21:26 +03:00
Bohdan Shulyar
67df4861ce add back mittorn's exit zone 2024-02-16 12:52:03 +02:00
Velaron
4ad3e52407 Fix build again 2024-02-10 00:53:46 +02:00
Velaron
b5b2e322c2 Fix build 2024-02-08 23:50:09 +02:00
Velaron
2e39432e04 Support hd background 2023-11-23 15:03:08 +02:00
Velaron
75e0eb8f7d android: move to gradle 2023-10-26 14:25:18 +03:00
Alibek Omarov
4d7309b77d gitignore: add build dirs 2021-12-08 18:04:34 +03:00
Alibek Omarov
384cc8541e compile.sh: use clang bundled in NDK 2021-12-08 18:04:34 +03:00
Alibek Omarov
63bd4faa22 Update submodules 2021-12-08 18:04:34 +03:00
Bohdan Shulyar
acba3e8c7b android: proper escaping in gen-version.sh 2021-10-09 21:21:01 +03:00
Alibek Omarov
a4ec54551a android: fix ampersand, lt, gt in version generator script 2021-07-03 22:45:29 +03:00
Velaron
155e766276 android: update signature check 2021-04-04 21:56:15 +03:00
Velaron
59ef64c821 android: update certificate check 2021-04-04 21:56:15 +03:00
Alibek Omarov
9feaee3e28 android: bump API level to 29 (Android 10) to support allowAudioRecording manifest property. Could be also done with reflection but I don't want do reflection 2020-11-27 21:58:11 +03:00
nillerusr
5fd30876ab fix max_aspect 2020-10-29 21:35:26 +03:00
abasgames
8d1288373d Audio capture 2020-09-30 21:39:50 +03:00
Alibek Omarov
f487cf0763 Revert "waf/android: add dex output to aapt input"
This reverts commit c2840ce608.
2020-08-23 19:07:22 +03:00
Alibek Omarov
bea0f46d31 android: don't pause on foldables 2020-08-23 19:04:24 +03:00
Francisco Medina
a55282f2c8 l10n: Spanish: Translated using Weblate
Currently translated at 84.0% (58 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/es/
2020-07-22 15:26:38 +03:00
Francisco Medina
09764c65ae l10n: Spanish: Added translation using Weblate 2020-07-22 15:26:38 +03:00
Alperen
6f29e2ea12 l10n: Turkish: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/tr/
2020-07-22 15:26:38 +03:00
Alibek Omarov
2ed18ddded readme: add simple readme 2020-07-11 16:19:08 +03:00
mittorn
9f45a1e8cb XashService: fix crash on api26 2020-07-10 09:16:11 +07:00
mittorn
2e5fcd45bd XashActivity: enable navbar menu key 2020-07-10 06:54:32 +07:00
mittorn
2c8cf356f9 XashActivity: fix white navbar background 2020-07-10 06:53:31 +07:00
mittorn
8b6243d872 fwgslib: fix immersive mode check 2020-07-10 06:52:57 +07:00
mittorn
8082d2092f XashService: Icon does not exist before 23 2020-07-08 01:47:31 +07:00
mittorn
c2840ce608 waf/android: add dex output to aapt input 2020-07-08 01:46:19 +07:00
mittorn
addd2f76ef resources: copy mipmaps to drawable, ensure mipmap used on 19+ and xml icon on 26+ when possible 2020-07-08 01:03:18 +07:00
mittorn
d6c715c5c3 XashService: re-enable api21 notification code 2020-07-08 00:59:57 +07:00
mittorn
1e84082d81 AndroidManifest: fix exit button receiver name 2020-07-08 00:59:12 +07:00
mittorn
8602bd4e9e Refactor XashActivity, fix crash in XashService, add compat wrappers 2020-07-07 07:28:43 +07:00
mittorn
ac0e9b633d mipmap does not work on 4.2- 2020-07-07 07:26:25 +07:00
mittorn
d683f32a34 platform28 allows implicit cast Object to NotificationManager??? 2020-07-07 07:22:32 +07:00
mittorn
b92b13158b waf/android: prefer aapt, aapt2 has compatibility issues 2020-07-07 07:21:01 +07:00
Serkan Cık
dea0c2ce43 l10n: Italian: Translated using Weblate
Currently translated at 86.9% (60 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/it/
2020-06-06 00:10:16 +03:00
Adam Fullbuster
0ec21fa424 l10n: Italian: Translated using Weblate
Currently translated at 69.5% (48 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/it/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
0258055c1d l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Anonymous
9280d47766 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
63d6c2f1fd l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Anonymous
ad3ca3b304 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
1564dc4e8e l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Anonymous
7dbaf87cd4 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
5b0aed5035 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Anonymous
72f3fc9578 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
00a0959e45 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Bohdan Shulyar
f587f6ecd6 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Anonymous
2906ab7cd5 l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-06-06 00:10:16 +03:00
Emanuele Scherillo
2b30141bcc l10n: Italian: Added translation using Weblate 2020-06-06 00:10:16 +03:00
Максим
7bcce219ed l10n: Ukrainian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/uk/
2020-05-25 21:14:30 +03:00
Serkan Cık
5a7ea67a0e l10n: Turkish: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/tr/
2020-05-25 21:14:30 +03:00
Allysson Samuel Amorim Vaz Cunha
c04631dad5 l10n: Portuguese (Brazil): Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/pt_BR/
2020-05-25 21:14:30 +03:00
Serkan Cık
aca292da94 l10n: Turkish: Added translation using Weblate 2020-05-25 21:14:30 +03:00
Максим
f1b4b01029 l10n: Ukrainian: Added translation using Weblate 2020-05-25 21:14:30 +03:00
Allysson Samuel Amorim Vaz Cunha
5d737987bb l10n: Portuguese (Brazil): Added translation using Weblate 2020-05-25 21:14:30 +03:00
a1batross
f84dafb7fe l10n: Russian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/ru/
2020-05-06 02:39:28 +03:00
a1batross
dc6397e607 l10n: English: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS Android/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/en/
2020-05-06 02:37:35 +03:00
a1batross
a1f8416336 l10n: Russian: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS Android/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/ru/
2020-05-06 02:37:35 +03:00
a1batross
02f1a92a1b l10n: English: Translated using Weblate
Currently translated at 100.0% (69 of 69 strings)

Translation: Xash3D FWGS Android/Android translations
Translate-URL: https://l10n.mentality.rip/projects/xash3d-fwgs-android/android-translations/en/
2020-05-06 02:37:35 +03:00
Alibek Omarov
d5d3c6868e XashActivity: revert 59411a2 2019-12-23 05:48:30 +03:00
Alibek Omarov
b9028879fb XashService: refactor notification creating, add notification channels on Oreo, use native notification layout on >=21 2019-12-23 05:33:40 +03:00
Alibek Omarov
59411a214a XashActivity: refactor resizing code 2019-12-23 02:33:50 +03:00
Alibek Omarov
b69649c50e android: wscript: make Java code compatible with old Android devices 2019-12-04 01:16:34 +03:00
Alibek Omarov
dc13474729 android: use ImageView instead of drawableLeft 2019-12-04 01:15:20 +03:00
Alibek Omarov
7674964cc8 android: add forgotten permission, application options, bump version, rename ic_launcher_round to ic_launcher to make Android 7.x happy 2019-12-04 00:55:17 +03:00
Alibek Omarov
a8f3701e92 android: implement better way to get JNI libraries directory 2019-12-03 03:46:14 +03:00
Alibek Omarov
ad3157e940 submodules: update 2019-12-03 03:11:51 +03:00
Alibek Omarov
332f81553a android: revert to Java EGL management 2019-12-02 02:16:08 +03:00
Alibek Omarov
c22c227108 android: add adaptive icons for 26. Fix references to icons. 2019-12-01 16:20:06 +03:00
Alibek Omarov
e72b89a88b android: move icons to appropriate folder 2019-12-01 01:28:41 +03:00
Alibek Omarov
3369cca3e6 android: increase target API to Pie(GP requirements), implement requesting permissions 2019-11-29 19:42:48 +03:00
Alibek Omarov
906e6ece0b compile.sh: use host clang by default, enable aarch64 2019-11-29 17:04:04 +03:00
Alibek Omarov
4179464de1 submodules: update 2019-11-29 17:03:26 +03:00
Alibek Omarov
fe0661fde9 android: rename package for new engine 2019-11-28 23:06:56 +03:00
Alibek Omarov
76cd263c83 compile.sh: enable strip 2019-11-07 08:47:48 +03:00
Alibek Omarov
fa4c023961 compile.sh: allow to override API version 2019-11-07 07:08:06 +03:00
Alibek Omarov
e18d0976ef compile.sh: enable polly on host toolchain, as NDK doesn't have it... 2019-10-11 09:11:12 +03:00
Alibek Omarov
ae23528e04 compile.sh: fix checking variables, enable poly-opt for SDK and engine on release builds 2019-10-11 08:53:03 +03:00
Alibek Omarov
bee36ae6a8 waf: upgrade to latest waifu revision 2019-10-11 08:52:19 +03:00
Alibek Omarov
397dbcad51 submodules: update to latest revision 2019-10-11 08:51:53 +03:00
Alibek Omarov
4eb42bf73a compile.sh: spew config.log on error 2019-10-09 02:59:16 +03:00
Alibek Omarov
eb830889f9 compile.sh: allow TOOLCHAIN to be overriden 2019-10-09 01:51:14 +03:00
Alibek Omarov
98ba50c974 compile.sh: allow ARCHS to be overriden 2019-10-09 01:49:56 +03:00
Alibek Omarov
a692857fe8 compile.sh: use shared certificate by default even on release builds 2019-10-07 05:54:56 +03:00
Alibek Omarov
4fa711bfd3 compile.sh: fix build type selection 2019-10-07 05:35:45 +03:00
Alibek Omarov
8d9d9fd682 android: sign debug builds with debug key 2019-09-27 05:33:12 +03:00
Alibek Omarov
949c9e278b waifulib: android: refactoring, add support for apksigner 2019-09-27 05:32:52 +03:00
Alibek Omarov
74babbfe01 submodules: update 2019-09-21 03:54:00 +03:00
Alibek Omarov
e260228e90 submodules: update 2019-09-20 18:50:51 +03:00
Alibek Omarov
a0d0aac9da Update submodules 2019-09-11 20:44:46 +03:00
Alibek Omarov
6755c8ef7f waf: move to waifu 2019-09-10 14:46:52 +03:00
Alibek Omarov
b7d97bc21b compile.sh: enable building native code 2019-09-10 11:27:21 +06:00
Alibek Omarov
24a56795aa compile.sh: add termux support, disable native building temporarily 2019-08-28 01:18:26 +03:00
Alibek Omarov
2fd2d749dc android: wscript: enable android opt, set jni(commented out, as I can't test it now) 2019-08-28 01:17:39 +03:00
Alibek Omarov
84e158da79 waflib: android: apkjni packaging is optional now(activated by passing 'jni'), add aapt1 preliminary support 2019-08-28 01:16:34 +03:00
Alibek Omarov
31edf71985 submodules: update 2019-08-23 12:31:03 +03:00
Alibek Omarov
4f25b03c9c compile: check for symlinked source 2019-07-29 08:39:40 +03:00
Alibek Omarov
3da70aa4f7 compile: remove hardfp from defaults, remove static library hack, don't sign if USER isn't me :) 2019-07-29 08:06:16 +03:00
mittorn
74dd990f2f waflib: android: fix wrong --release for dx 2019-05-19 18:50:39 +07:00
Alibek Omarov
1aab248fa4 waflib: android: python 3 fix 2019-05-19 14:48:33 +03:00
Alibek Omarov
8582c505e9 XashActivity: remove java EGL code 2019-05-12 02:59:59 +03:00
Alibek Omarov
57cb127d73 waflib: android: use static version checks instead of try-catch, define which version has introduced d8 2019-05-11 18:58:22 +03:00
Alibek Omarov
af9a759e9a waflib: android: build-tools 27 support 2019-05-10 03:14:42 +03:00
Alibek Omarov
c7b1f28590 compile.sh: exit if waf has failed 2019-05-10 03:13:57 +03:00
Alibek Omarov
37c84ad909 compile.sh: add extras.pak generation(TODO: move to waf?) 2019-05-06 20:18:38 +03:00
Alibek Omarov
face262d32 engine: update 2019-05-06 19:26:54 +03:00
Alibek Omarov
c9716b87be waflib: android: implement appending native libraries, make dependency graph cleaner 2019-05-06 19:24:41 +03:00
Alibek Omarov
5ec762b69c compile.sh: add build types 2019-05-06 19:12:39 +03:00
Alibek Omarov
688fc87f48 XashActivity: remove gpgs_support 2019-05-06 19:12:25 +03:00
Alibek Omarov
0aaf624cd7 compile.sh: build also HLSDK. Add check if sources are symlinked, which is really handy in development 2019-05-06 04:24:42 +03:00
Alibek Omarov
64403a5cd8 submodules: add 2019-05-06 04:23:59 +03:00
Alibek Omarov
5efac59e8f android.mk: completely remove it, as we use waf everywhere now, add simple buildscript 2019-05-01 19:05:15 +03:00
Alibek Omarov
2eae8a02e5 nanogl: remove submodule, now it's direct dependency of engine 2019-04-27 12:09:59 +03:00
Alibek Omarov
0cfc3966c5 gpgs_support: drop Google Play Games services support, it wasn't used anyway by any game. We need another interface, probably intent-based. 2019-04-27 12:09:27 +03:00
Alibek Omarov
a56fe98dc5 waflib: android: cleanup 2019-04-25 04:37:28 +03:00
Alibek Omarov
586a03d431 gitignore: extend even more 2019-04-25 04:24:15 +03:00
Alibek Omarov
c175a1b949 waf: add android.py plugin that helps build APK file 2019-04-25 04:23:30 +03:00
Alibek Omarov
3937520d3e gitignore: add *.pyc 2019-04-25 04:22:08 +03:00
Alibek Omarov
4309604eca waf: deploy waf build system 2019-04-25 04:21:38 +03:00
Alibek Omarov
4360676f96 scripts: move scripts to android folder 2019-04-25 02:28:36 +03:00
Alibek Omarov
6ad205a619 fwgslib: certcheck: remove BuildConfig.java dependency 2019-04-15 23:55:59 +03:00
Alibek Omarov
24632c0e69 android: move all sources to android folder, remove ant build system 2019-04-15 23:52:47 +03:00
Night Owl
6d2d7a9d6d Fix broken link. Update version string. 2018-10-09 10:43:54 +05:00
a1batross
7e76089b76 Bump to 0.19.3 2018-09-28 18:54:07 +03:00
Night Owl
73cbe46ecb Fix typo. Add a missing newline character. 2018-09-28 18:11:44 +05:00
Alibek Omarov
385c557a60 Add privacy policy link on our website 2018-09-25 17:40:58 +03:00
mittorn
6058828a33 Decrease mMinHeight for cstrike to make minimal resolutions availiable 2018-07-25 00:24:47 +00:00
Alibek Omarov
cd11dd138e Update engine 2018-07-14 21:20:32 +03:00
mittorn
5b93c0651e Update extras again 2018-07-14 17:47:37 +07:00
Alibek Omarov
63026564c2 Update pak version. Update engine submodule 2018-07-14 01:24:05 +03:00
Alibek Omarov
f415ac379d An update is scheduled for 14th of July 2018-07-14 00:04:01 +03:00
Alibek Omarov
7b62f5af21 Update submodules 2018-07-14 00:00:39 +03:00
mittorn
bfef1cf301 Fix vibrator check 2018-06-06 01:37:58 +07:00
Night Owl
0f02f3472e Update README.md. 2018-05-24 22:56:46 +03:00
mittorn
2f8ab7174b Add android.max_aspect tag 2018-05-15 19:54:53 +07:00
mittorn
1b5e416988 Remove some magic numbers 2018-05-12 03:02:37 +07:00
mittorn
03105e096d Code clean, improve resolution selection 2018-05-12 02:56:17 +07:00
mittorn
3d19551172 Update submodules 2018-04-07 13:59:25 +07:00
mittorn
811de8d4e7 Fix possible page overflow 2018-04-07 13:53:14 +07:00
mittorn
0d1d899d7c Refactoring, fix theme 2018-04-07 13:52:57 +07:00
mittorn
72e3313c30 Remove gkitchy adjustViewBounds, add landscape hack 2018-04-07 13:52:38 +07:00
Alibek Omarov
b48d965111 Fix gamepads, move gamepad motion event source check before mouse 2018-04-07 03:48:37 +03:00
Alibek Omarov
08d2309986 Add FExactBitSet for checking bitmasks, but exact 2018-04-07 03:48:37 +03:00
mittorn
cc0bf4bc43 Fix constants in switch cases 2018-04-07 03:48:37 +03:00
mittorn
fbb5301075 Smooth page return 2018-04-07 03:48:37 +03:00
mittorn
47433059b5 Fix animation speed 2018-04-07 03:48:37 +03:00
mittorn
5aaa34dc7e Make title adaptive 2018-04-07 03:48:37 +03:00
mittorn
f68aa134a1 Use adaptive text size 2018-04-07 03:48:37 +03:00
mittorn
8577f3bd79 Implement PagedView 2018-04-07 03:48:37 +03:00
mittorn
8e441e2b96 Fix layout sizes 2018-04-07 03:48:37 +03:00
mittorn
2b0a4f552b Workaround strange getExternalFilesDir freeze 2018-04-07 03:48:37 +03:00
mittorn
aa3af3bf67 Fix html content and localization 2018-04-07 03:47:03 +03:00
mittorn
31573ccbeb Simple tutorial (without fragments, ViewPagers and vertical layout) 2018-04-07 03:47:03 +03:00
Alibek Omarov
9c086c503a Fix NPE in GetExternalFilesDir. Correct return value in gamepad code 2018-04-01 18:29:57 +03:00
Alibek Omarov
27b2fb55c2 Update submodules 2018-04-01 02:00:22 +03:00
Alibek Omarov
69081da566 Bump versionCode to 1096, as release is scheduled for 1 April 2018-03-23 22:20:08 +03:00
Alibek Omarov
2d04a3faa9 Fallback to external files dir, if writedir invalid(empty) 2018-03-23 22:20:08 +03:00
Alibek Omarov
300e65e200 Suggest converting to rodir, if write test has failed 2018-03-23 22:20:08 +03:00
Alibek Omarov
09a88e4cbc Merge pull request #163 from VladAndroidGamer/patch-3
Русский Readme
2018-03-22 01:03:40 +03:00
Владислав Сухов
ffa411b874 Russian Readme file 2018-03-21 14:47:56 +06:00
Владислав Сухов
cc25bb91bd Русский Readme 2018-03-21 14:44:20 +06:00
Alibek Omarov
a3e10ef9ac Update buildscript 2018-03-21 02:19:43 +03:00
Alibek Omarov
1c1cab6e30 Use monochrome special icon for status bar service. Add RoDir settings to the launcher. 2018-03-21 02:18:47 +03:00
Alibek Omarov
88873cad9d Fix untranslated button Finish 2018-03-14 00:27:31 +03:00
Alibek Omarov
48fe23b483 Merge pull request #162 from VladAndroidGamer/patch-2
Update pages.xml
2018-03-08 11:42:22 +03:00
Владислав Сухов
76f3b31eb4 Update pages.xml
Исправлены опечатки
2018-03-08 09:19:12 +06:00
Alibek Omarov
ea4929c7e7 Enable tutorial view by default 2018-03-01 23:51:34 +03:00
Alibek Omarov
00d5b652c1 Fix build 2018-03-01 23:45:29 +03:00
Alibek Omarov
df311e861d Russian translation of tutorial 2018-03-01 23:38:53 +03:00
Alibek Omarov
e7a6988811 Update pages.xml 2018-03-01 23:28:39 +03:00
Alibek Omarov
9c72a2ed05 All translation other than English and Russian was temporarily disabled, because they do not represent exact translation of English text anymore(missing translations, translation errors) 2018-03-01 22:14:52 +03:00
Alibek Omarov
ea085ae8d7 Update Russian translation 2018-03-01 22:12:34 +03:00
Alibek Omarov
4cf28bb6b8 Fix English strings 2018-03-01 22:11:55 +03:00
Alibek Omarov
4e58654c10 Remove hardcoded strings to proper translation 2018-03-01 21:50:13 +03:00
Alibek Omarov
57847a7dd3 Now all tutorial textures have same size. Add tutorial texture for fifth page 2018-03-01 20:50:46 +03:00
Alibek Omarov
a1af4dba99 Update engine 2018-02-15 19:24:55 +03:00
Alibek Omarov
96432c6ca9 Common sign key for all testing builds 2018-02-15 19:14:16 +03:00
Alibek Omarov
268f4a8ec2 Update submodules 2018-02-04 17:54:22 +03:00
Alibek Omarov
a80e3e3022 Fix wrong directory name in buildscript 2018-02-04 17:53:52 +03:00
Alibek Omarov
8e517beff8 Revise gamepad buttons IDs, fix wrong 2018-02-04 17:52:22 +03:00
Alibek Omarov
108dc1243f Add --no-undefined globally to Application.mk 2018-02-04 17:34:26 +03:00
Alibek Omarov
3b3d82e097 Fix tutorial back string 2018-02-04 17:10:56 +03:00
Alibek Omarov
94bdf0238a Twice decrease margins for notification 2018-02-04 17:08:07 +03:00
Alibek Omarov
41fc8e1672 Add build script from cs16client 2018-02-04 17:00:41 +03:00
Alibek Omarov
4d7018bfde Update russian translation. Get rid of untranslated strings in layouts. Remove build.sh script. 2018-02-04 17:00:16 +03:00
Alibek Omarov
0637008eec Set more proportional margins for notifications 2018-02-04 13:36:22 +03:00
Alibek Omarov
c658fe782d Reformat XashService.java 2018-02-04 13:32:57 +03:00
Alibek Omarov
94ec3df282 Update test AndroidManifest. Set version string to 0.19.1. 2018-02-04 12:54:14 +03:00
Alibek Omarov
90fa1c1fef Add graphics for page0 and page3, remove HTML tags from pages.xml. 2018-02-04 01:46:38 +03:00
Alibek Omarov
78e36a2eab Add @msayan's tutorial-view library, add support-v4 as dependency, add paged tutorial(WIP) 2018-01-30 23:19:07 +03:00
Alibek Omarov
88df5e4631 Update strings: set version to 0.19.1, add @nekonomicon to credits, add @msayan to credits for tutorial-view library, add Finish string 2018-01-30 23:16:18 +03:00
Alibek Omarov
124bedcc59 Fix tutorial pages 2018-01-30 21:37:15 +03:00
Alibek Omarov
92423c8108 Rename drawable files, fix build 2018-01-29 02:15:32 +03:00
Alibek Omarov
d7389e4511 Remove unneeded SUPPORT_WEBP=false from travis.yml, as we don't use SDL and SDL_image. Update travis-deploy.sh from engine repo 2018-01-29 01:58:52 +03:00
Alibek Omarov
b923b3d6b6 Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2018-01-29 01:14:15 +03:00
Alibek Omarov
b7b468ba14 Add pictures for first two tutorial pages 2018-01-29 01:13:55 +03:00
mittorn
20f95b2104 Fix detecting mouse as touchscreen, add PointerIcon support 2018-01-24 04:11:13 +07:00
mittorn
c5900d761f Update submodule 2018-01-24 00:10:57 +07:00
Alibek Omarov
a09abe4bcf Rewrite pages.xml for English 2018-01-12 14:18:54 +03:00
Alibek Omarov
85641c3e1d ShellExecute extension to open update page 2018-01-08 19:42:09 +03:00
Alibek Omarov
57ce27dfe7 Don't read symlink while checking game lib directory. It's non-portable. 2018-01-01 20:18:17 +03:00
Alibek Omarov
2eb6fbbc42 Don't start service, if we are closing for some reason 2018-01-01 20:17:24 +03:00
Alibek Omarov (a1batross)
37a4c921a6 Update nanogl 2017-11-20 04:22:14 +03:00
Alibek Omarov (a1batross)
6432a9f68d Android part of FWGS/xash3d@a3a1dab commit [skip ci] 2017-11-20 03:41:56 +03:00
Alibek Omarov (a1batross)
25608759e5 Implement ShellExecute for Android(java part) 2017-11-01 17:27:08 +03:00
Alibek Omarov (a1batross)
0213d3be89 Disable cert checking for ant debug builds 2017-11-01 17:26:41 +03:00
mittorn
8ec0283c06 Add WIP firstrun text (need rewrite) 2017-10-20 10:10:26 +07:00
mittorn
bd17310bad Update submodules 2017-10-20 10:09:35 +07:00
mittorn
67a296d304 Add firstrun dialog (WIP) 2017-10-02 04:14:26 +07:00
mittorn
2f4f36d407 Fix build 2017-10-01 23:52:23 +07:00
Alibek Omarov (a1batross)
828ede1e3a Add resolution change warning red text, add result resolution preview, make resolution custom fields appear in one line, make first use of FWGSLib, fix possible crash while activity is closed before engine thread was created 2017-09-30 02:29:55 +03:00
Alibek Omarov (a1batross)
1c02cfb443 Introduce FWGSLib: an utility library that contains userful shortcuts and hides Android and Java design flaws 2017-09-30 02:25:36 +03:00
Alibek Omarov (a1batross)
5885a6ccd4 Restrict too lower values to prevent possible client bugs 2017-09-28 23:40:33 +03:00
Alibek Omarov (a1batross)
be71073e93 Hide resolution settings, when resolution changing is not enabled. Fix crashes, when scale, width or height textboxes are filled with invalid data 2017-09-28 23:33:18 +03:00
Alibek Omarov (a1batross)
dcd92e8a57 Port fix for batch text removing from SDL2, fix twice text input on some T9/Swype-like keyboards 2017-09-28 21:57:40 +03:00
Alibek Omarov (a1batross)
a1e8f0e1df Grey-out select folder while loading 2017-09-28 21:01:46 +03:00
Alibek Omarov (a1batross)
d23797a244 Reformat XashActivity.java 2017-09-28 20:54:10 +03:00
Alibek Omarov (a1batross)
0c5d9a8146 Remove org.json submodule, as this is a part of public Android SDK 2017-09-28 16:57:30 +03:00
Alibek Omarov (a1batross)
51b53e0f2c Fix default build(test.version=0) 2017-09-28 16:57:30 +03:00
mittorn
691fbe8615 Fix missing : 2017-09-24 10:49:08 +00:00
mittorn
c25ebc4adc Use git credentials 2017-09-24 10:21:49 +00:00
mittorn
b8b44ff3e3 travis: Set android platform to 19 2017-09-24 06:58:38 +07:00
mittorn
16c91c4046 Install ant via apt 2017-09-24 06:48:25 +07:00
mittorn
8dbe38ebfe Add ant install to travis script 2017-09-24 06:37:00 +07:00
mittorn
a62975fe1f Add Ok button to about dialog 2017-09-24 06:28:01 +07:00
mittorn
00ff0ced07 Implement screen resolution changing 2017-09-24 06:26:51 +07:00
mittorn
b0099a2c5d Update submodules 2017-09-24 03:21:47 +07:00
mittorn
f0bd91fba7 Update nanogl 2017-08-17 20:45:08 +00:00
mittorn
2168912095 Fix outdated submodules 2017-07-23 15:15:46 +07:00
mittorn
efc472cf84 Hack legacy style to make more similar to modern 2017-07-23 04:01:21 +07:00
mittorn
1018169842 Make force-quit after engine wait timeout 2017-07-22 13:51:07 +07:00
mittorn
06359502e1 Add wait timeouts 2017-07-22 13:49:07 +07:00
EXL
0949e89c11 PR #143 improvements
Drop bad NullPointerException catching code
2017-06-24 18:19:54 +04:00
Alibek Omarov
c1da6335e4 Merge pull request #143 from EXL/fix_fpicker_crash
Fix crash in FPicker on Android OS >= 7.0
2017-06-23 08:31:06 +04:00
EXL
4e07206c98 Fix crash in FPicker on Android OS >= 7.0
Drop always 'false' condition
2017-06-23 09:58:36 +07:00
mittorn
426b088e16 Remove unuseful control key hack
It breaks ctrl-space on android 7+ and crashes on 2.3-
2017-06-22 02:20:33 +06:00
mittorn
0e3b544534 Update nanogl 2017-06-19 07:10:16 +00:00
mittorn
45b51451ab Update nanogl and engine 2017-06-18 20:22:42 +00:00
mittorn
9313824a5f Update engine 2017-04-30 12:06:44 +06:00
mittorn
6f5e809507 GDBSafe mode that disables some dangerous operations 2017-04-25 23:52:09 +00:00
mittorn
7c44e6451a Disable MouseMove debug message 2017-04-25 21:55:30 +00:00
mittorn
27ca283446 Fix false-detecting mouse 2017-04-05 22:03:19 +00:00
Alibek Omarov (a1batross)
4647feaf35 Update gitignore 2017-04-01 11:52:59 +03:00
Alibek Omarov (a1batross)
67c8527e2b Revert some submodules 2017-04-01 11:51:18 +03:00
Alibek Omarov (a1batross)
3b6365a048 Remove OPEN_DOCUMENT_TREE request, because it's still does not gives permission to use fopen() call. So, forbid unwritable SD cards at all. 2017-04-01 00:52:13 +03:00
Alibek Omarov (a1batross)
d216265519 Merge. 2017-04-01 00:19:08 +03:00
Alibek Omarov (a1batross)
ba38146726 Bump version. Update submodules 2017-04-01 00:06:18 +03:00
mittorn
17ce269513 Restore pointer action checks 2017-03-31 18:34:08 +00:00
mittorn
8fcb6ca128 Fix compatibility again 2017-03-30 23:32:27 +00:00
mittorn
58cd129055 Update engine 2017-03-30 23:14:56 +00:00
mittorn
236586eed5 Fix build 2017-03-30 21:39:08 +00:00
mittorn
f51e6ab1e2 Proper mouse handling on nvidia devices 2017-03-30 19:58:11 +00:00
mittorn
fbcf7758bf Mouse support (nvidia extension) 2017-03-30 00:25:51 +00:00
mittorn
99454bac95 Update projects 2017-03-29 20:01:18 +00:00
mittorn
a4745e06fc Android id support 2017-03-28 23:32:39 +00:00
mittorn
9613276658 Disable gnustl_static when not needed 2017-03-28 22:47:19 +00:00
mittorn
b3777bd7c0 Fix compatibility problems, add setTitle, setIcon 2017-03-26 22:11:27 +00:00
mittorn
fa43690519 Update deploy script again 2017-03-25 20:58:20 +00:00
mittorn
aaba1b6db9 Update deploy script 2017-03-24 22:28:49 +00:00
mittorn
5368a7f56b Xash3D background service (prevend unload) 2017-03-24 22:03:00 +00:00
Mars873
6d9056c74c update translation (#132) 2017-03-15 00:46:04 +03:00
Alibek Omarov (a1batross)
ea60581142 Try to implement write permission checking and requesting permissions on newer Android devices 2017-03-07 00:00:32 +03:00
Alibek Omarov (a1batross)
139972e5c8 Try to check write permissions before engine launch 2017-03-06 00:01:39 +03:00
Alibek Omarov (a1batross)
24dd05dd36 gpgs_support: fix build 2017-03-05 21:23:22 +03:00
Alibek Omarov (a1batross)
b028a18d16 Remove jnisetenv library, restore old engine initialization. New library: gpgs_support, which initialized Google Play Games in Google Play builds. (In opensource builds does nothing) 2017-03-04 17:13:47 +03:00
Alibek Omarov (a1batross)
e2faa06de2 Finally implement all onPause, onStop and onDestroy, move JoystickHandler to JoystickHandler.java 2017-03-04 16:02:54 +03:00
Alibek Omarov (a1batross)
3b5e5462b4 XashActivity: Better use onPause for saving configs only, as this method is unkillable. onStop will just stop engine. 2017-03-04 00:56:51 +03:00
Alibek Omarov (a1batross)
323e314714 XashActivity: implement proper engine thread quit 2017-03-04 00:21:29 +03:00
Alibek Omarov (a1batross)
7867a53895 XashActivity: fix initialization 2017-03-03 00:00:04 +03:00
Alibek Omarov (a1batross)
2e2fca08a3 setenv: fix attributes 2017-03-02 23:00:56 +03:00
Alibek Omarov (a1batross)
770c72d0c5 setenv: forgotten include 2017-03-02 22:46:56 +03:00
Alibek Omarov (a1batross)
66eacf4839 Move setenv from engine to split library to allow lazy engine library loading 2017-03-02 22:29:30 +03:00
Alibek Omarov (a1batross)
af63c6fd5b XashActivity: fix return value 2017-03-02 21:37:32 +03:00
Alibek Omarov (a1batross)
9c9f98623a Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2017-03-02 21:34:03 +03:00
Alibek Omarov (a1batross)
4bfd57037b XashActivity: move loadLibrary call after setting up all envvars. 2017-03-02 21:33:27 +03:00
Alibek Omarov
58deff4184 Merge pull request #124 from AICgmo/patch-3
Korean
2017-02-16 11:17:49 +03:00
AICgmo
ec8393eccb Update strings.xml 2017-02-16 14:13:56 +09:00
a1batross
dd1607f261 Fix crash if MotionEvent.getDevice() will return NULL in joystick backend. Add a checks to InitGL, just in case 2016-12-07 00:25:09 +03:00
AICgmo
4138aaf19f Korean
Korean Edit
2016-11-29 17:13:46 +09:00
mittorn
de21d49463 Update upload script again 2016-11-25 11:26:49 +00:00
mittorn
b58214bc26 Fix typo 2016-11-25 11:12:47 +06:00
mittorn
a95b345e33 Make curl silent 2016-11-25 11:01:08 +06:00
mittorn
9d94f5973b exit 0 in deploy script 2016-11-25 11:01:08 +06:00
mittorn
ceba3e90c6 Fix not showing .. when folder name too short 2016-11-25 11:12:31 +07:00
mittorn
a38603ebe1 Add github deploy script 2016-11-25 00:59:09 +06:00
mittorn
a9bb69cd32 Fix scripts again 2016-11-25 00:52:21 +06:00
mittorn
1a0700aafe Update submodules 2016-11-25 00:36:30 +06:00
mittorn
690275a0de Fix scripts 2016-11-24 20:08:03 +00:00
mittorn
b98df4df07 Update nanogl submodule 2016-11-24 19:46:17 +00:00
mittorn
fa91f6d279 ant needs property value 2016-11-24 13:31:15 +00:00
mittorn
3a4d5beabd AAPT has written by monkeys! 2016-11-24 13:14:47 +00:00
mittorn
ed66e84f71 Try fix stupid aapt 2016-11-24 13:05:59 +00:00
mittorn
d97cd43174 Try move condition to target block 2016-11-24 12:53:22 +00:00
mittorn
fae4e066e9 Ant is completely uneuseful without third-party libraries 2016-11-24 12:33:10 +00:00
mittorn
9c3ed99de2 Add if task def 2016-11-24 12:25:25 +00:00
mittorn
b0a4b00eb0 Conditional test version 2016-11-24 12:06:03 +00:00
mittorn
bf245a5439 Update travis-upload.sh 2016-11-24 14:21:13 +06:00
mittorn
ac3d861df7 Update travis-upload.sh 2016-11-24 14:57:36 +07:00
mittorn
2e9b4bf07c Try new upload script 2016-11-24 12:36:00 +06:00
mittorn
f3ec856995 Update build.xml 2016-11-23 14:22:11 +06:00
mittorn
4aa0439be4 Re-enable full build 2016-11-22 02:12:05 +06:00
mittorn
41ba97d426 Fix gen-config 2016-11-22 02:01:10 +06:00
mittorn
e759bf819a Ant travis test build 2016-11-22 01:34:50 +06:00
a1batross
e45165a958 Fix background of FPicker 2016-09-13 22:29:53 +03:00
a1batross
f7a298e8b7 Fix shorcut activity style 2016-09-13 22:26:39 +03:00
a1batross
3fb08631c4 Disable autoupdater in Google Play edition 2016-09-13 21:34:30 +03:00
a1batross
54166f6be4 Fix gen-config & gen-version scripts 2016-09-13 21:34:11 +03:00
a1batross
abf3e99896 Update gitignore. Move android-support-v4 to unused directory. It's used only in google play builds 2016-09-13 21:27:59 +03:00
a1batross
da3c921ea8 Fix build.sh 2016-09-13 21:08:39 +03:00
a1batross
19bae91be1 REmove pregenerated XashConfig, choose Legacy theme if sdk < 21 2016-09-13 21:06:41 +03:00
a1batross
58f8f87e61 Bump to 0.18.1. Really. 2016-09-13 20:42:30 +03:00
mittorn
4209dd9529 Update engine 2016-09-13 00:00:46 +00:00
mittorn
a207140613 Update repos 2016-09-12 00:58:28 +00:00
mittorn
34b12cdf8c Update branches 2016-09-11 08:38:16 +00:00
mittorn
7bdc2664d4 Bump pak version 2016-09-10 20:45:34 +00:00
mittorn
8de7adae11 Bump version 2016-09-10 20:44:41 +00:00
mittorn
006c301564 Config generator 2016-09-10 20:25:17 +00:00
a1batross
e917d13ce3 Add XashConfig(look TODO), replace checks in XashActivity 2016-09-06 20:42:07 +03:00
a1batross
f8f8e5c743 Match versionCode to engine's build number 2016-09-06 20:14:32 +03:00
a1batross
6f16759f6c Fix ignored gamepad button when event is not have gamepad or joystick source. 2016-09-06 20:14:11 +03:00
a1batross
05ff89f1a3 Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2016-09-04 00:17:29 +03:00
Alexey
6e3365a412 Fix pixelformat bit sizes (#111) 2016-08-23 17:32:43 +06:00
Alibek Omarov
1e8888b2a4 [skip ci] Fix build status readme link 2016-08-23 17:29:16 +06:00
mittorn
a5a6dfb0df Fix enter key in some keyboards 2016-08-13 20:31:00 +00:00
a1batross
c9febff75f Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2016-08-14 00:01:55 +06:00
mittorn
a5a51792dc Update hlsdk 2016-08-13 17:02:48 +00:00
a1batross
df1dbbdd09 Update submodules 2016-08-13 16:12:51 +06:00
mittorn
8d26578c33 Update test build script 2016-08-12 21:40:08 +00:00
mittorn
27c1257d97 Update branches 2016-08-12 21:28:05 +00:00
a1batross
da85d25a02 Update engine branch(again) 2016-08-13 00:37:07 +06:00
a1batross
667d410b9f Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2016-08-13 00:19:37 +06:00
mittorn
d00b27d447 Update branches 2016-08-12 19:36:50 +00:00
a1batross
5784a2116f Remove SDL2 from README 2016-08-13 00:19:18 +06:00
a1batross
016be4ab0f Resigning our public release isn't good ;) 2016-08-13 00:12:19 +06:00
a1batross
3cda974475 Fix build 2016-08-12 23:23:12 +06:00
mittorn
78f8a7279a Update engine 2016-08-12 16:11:40 +00:00
a1batross
f1813fed8a Merge branch 'master' of https://github.com/FWGS/xash3d-android-project 2016-08-12 22:08:07 +06:00
a1batross
adae21a549 New icons. Add xxxhdpi(192x192) icon. 2016-08-12 22:07:23 +06:00
mittorn
456e391c75 Update engine 2016-08-12 14:32:06 +00:00
mittorn
ebba9effb7 Refactor key events, send lost dpad events as keyboard 2016-08-12 14:30:42 +00:00
mittorn
12e6b7a9ab Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project 2016-08-12 13:16:55 +00:00
mittorn
172d3f9e88 Fix strings in resources 2016-08-12 08:23:10 +00:00
mittorn
e471a9d586 Remove SDL folder 2016-08-11 20:41:26 +00:00
mittorn
9a78494be9 Disable steam from AndroidManifest 2016-08-11 20:38:00 +00:00
mittorn
438d574714 Disable steam again 2016-08-11 20:35:33 +00:00
mittorn
dff2f20dbb Update branches 2016-08-11 20:25:05 +00:00
mittorn
1e3e1c574d Update build script 2016-08-11 20:18:08 +00:00
mittorn
b2d221e3df Update omp blacklist 2016-08-11 19:57:44 +00:00
a1batross
e8d0a3a5b6 Update submodules: engine, json and xash-extras 2016-08-11 23:35:41 +06:00
a1batross
6a3541f6d9 Invert look axes 2016-08-11 23:34:40 +06:00
mittorn
98898f852e Merge branch 'omp' 2016-08-11 07:44:30 +00:00
mittorn
5a2b0b1514 Remove SDL from gen-version.sh 2016-08-11 07:31:29 +00:00
a1batross
e76774ebe3 Update submodules 2016-08-11 12:29:43 +06:00
mittorn
2e11e1cd30 Ignore other configuration changes 2016-08-09 12:01:47 +00:00
mittorn
77e209f5ed Prevent crash on hardware keyboard connect 2016-08-09 11:28:22 +00:00
mittorn
2c73f5a0fa Prevent launch while extras in unpacking 2016-08-09 10:52:32 +00:00
mittorn
d35d54afa4 Fix keyboard/resize in immersive mode 2016-08-09 10:50:52 +00:00
a1batross
2e42e30f1c Update engine. Increase versionCode, so Google Play don't complain about updating Xash3D everytime. 2016-08-07 22:23:23 +06:00
mittorn
6f5ccd4239 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project into remove-sdl 2016-08-05 17:43:55 +00:00
mittorn
f44451e0f1 Fix compatibility 2016-08-05 17:43:46 +00:00
a1batross
4fc4454a74 [skip ci] Just disable XASH_SDL in debug buildscript 2016-08-05 19:53:14 +06:00
a1batross
100f89b0e7 Update engine 2016-08-05 19:48:06 +06:00
a1batross
2916a1020e Merge 'remove-sdl' branch into 'master' 2016-08-05 19:43:56 +06:00
a1batross
3192fd851d Update engine 2016-08-05 19:33:19 +06:00
a1batross
ce2e4767ad Swap yaw and pitch axes again 2016-08-05 19:31:42 +06:00
a1batross
8133cd9d01 Implement Immediate Mode(sticky) on 4.4 or higher 2016-08-05 19:17:12 +06:00
a1batross
e75f120cf7 Rework FPicker to use AsyncTask. Also change spaces to tabs. 2016-08-05 19:16:01 +06:00
a1batross
774ee7cf38 Update engine version. Update URLs in submodules 2016-08-05 15:22:27 +06:00
a1batross
f6f2aede91 Remove SDL2 submodule 2016-08-05 15:10:56 +06:00
mittorn
063dc599b9 Fallback to key event on gamepads 2016-08-01 19:11:37 +00:00
mittorn
0a35d46131 Forgot initialize handler 2016-08-01 16:08:41 +00:00
mittorn
ad5147a53f Joystick compatibility mode 2016-08-01 11:27:51 +00:00
mittorn
c02a3167ca Update submodules 2016-08-01 09:51:14 +00:00
mittorn
7dde5b83b1 Allow unaligned access 2016-08-01 09:42:30 +00:00
mittorn
7a10caf3df Fix build 2016-08-01 09:40:56 +00:00
mittorn
7db489df98 Bump versions 2016-08-01 09:28:06 +00:00
a1batross
d2b0860577 Swap pitch and yaw in joystick constants 2016-07-31 21:06:41 +06:00
a1batross
0af71adf39 Fix build, fix awful merge, add joystick backend 2016-07-28 00:12:01 +06:00
a1batross
4697cda8b0 Android joystick backend 2016-07-26 22:39:54 +06:00
a1batross
df0a0f2a64 Update autoupdater link 2016-07-26 18:01:17 +06:00
a1batross
106b193511 Autoupdater: add a checkbox for checking beta versions also 2016-07-26 17:54:29 +06:00
a1batross
1195c1b96b Merge autoupdate to remove-sdl 2016-07-26 17:07:01 +06:00
a1batross
e48b54d461 Merge branch 'remove-sdl' of https://github.com/SDLash3D/xash3d-android-project into remove-sdl 2016-07-26 16:56:57 +06:00
a1batross
1c4c10e97e SDLash3D->Flying With Gauss 2016-07-22 19:38:49 +06:00
mittorn
c4d3e4af20 New test icons 2016-07-02 22:50:31 +00:00
mittorn
d19f81fef1 Add switch for resize on keyboard 2016-07-02 22:31:25 +00:00
mittorn
e55c292c81 Update engine 2016-07-02 22:30:01 +00:00
mittorn
249bbf991a Update engine 2016-06-27 11:01:00 +00:00
mittorn
a7a1a2457c Update engine 2016-06-26 11:15:37 +00:00
mittorn
cc211aa82e Update branch 2016-06-13 20:09:45 +00:00
mittorn
530d68e43a Update branches 2016-06-12 20:44:39 +00:00
a1batross
276afa836b Merge branch 'remove-sdl' of https://github.com/SDLash3D/xash3d-android-project into remove-sdl 2016-06-11 20:06:40 +03:00
mittorn
1fde2ba0dd Update layout 2016-05-31 12:23:09 +00:00
mittorn
c52453ea1a Volume buttons 2016-05-31 09:03:38 +00:00
mittorn
cd1c47245a Update engine 2016-05-27 00:18:02 +00:00
a1batross
4ccca49099 Update all translations: update russian translation, remove untranslatable strings 2016-05-21 20:13:48 +03:00
a1batross
38ec856198 Fix new version checking 2016-05-21 20:13:18 +03:00
a1batross
9b2c616baa Add autoupdate checker 2016-05-20 23:46:35 +03:00
a1batross
e5c3122ba7 Lower android API 2016-05-20 23:46:11 +03:00
a1batross
64b30c4bd6 Fix warnings 2016-05-20 22:32:59 +03:00
a1batross
2ddcaf37b4 Add org.json package 2016-05-20 14:01:28 +03:00
a1batross
072781f21f Merge branch 'travis-new-path' into remove-sdl 2016-05-20 13:20:07 +03:00
mittorn
379266732e Merge remote-tracking branch 'origin/travis-new-path' into remove-sdl 2016-05-16 22:26:53 +00:00
mittorn
1333895aa6 Update engine 2016-05-16 22:24:23 +00:00
mittorn
fa1d58020b Update engine 2016-05-15 09:25:43 +00:00
Alibek Omarov
f1aa3d2832 Merge pull request #102 from DeicPro/master
Fix links on About dialog
2016-05-14 01:37:28 +03:00
mittorn
dab20204ce Update branches 2016-05-13 22:29:13 +00:00
a1batross
87a536ffc0 Adjust upload script 2016-05-14 01:19:07 +03:00
a1batross
77327d2c21 Fix script 2016-05-14 00:50:27 +03:00
a1batross
491d537384 Seems gen-version.sh generates invalid XML when commit message have characters like less- or greater-than signs 2016-05-14 00:43:37 +03:00
a1batross
8a599ee8e9 Forgot 'sh' >___< 2016-05-14 00:28:02 +03:00
a1batross
6f27a141a5 Mistype in script name >_< 2016-05-14 00:25:23 +03:00
a1batross
12115e1dd1 Rework Travis autobuilds 2016-05-14 00:10:39 +03:00
Deic
9e515756af remove useless arg 2016-05-13 22:51:21 +02:00
Deic
e5268bcf3f fix TextView on dialog
Links work now.
2016-05-13 22:49:45 +02:00
Deic
0c16521ff4 Merge pull request #1 from SDLash3D/master
merge
2016-05-13 22:42:18 +02:00
a1batross
9575c9a9b5 Fix build for Brazil Portuguese 2016-05-13 20:06:30 +03:00
mittorn
ff81e98bc2 Update branches 2016-05-13 14:56:35 +00:00
mittorn
b708774bcd Update branches 2016-05-12 22:43:28 +00:00
mittorn
7bcaa0db87 Disable EGL initialization, called from native now 2016-05-12 22:42:15 +00:00
Matheus Naldi
f4538c2eec Added translation for Brazilian Portuguese 2016-05-12 11:13:37 -03:00
mittorn
19c8340b5c Add default icon 2016-05-09 19:51:27 +00:00
mittorn
0735d551ff Implement messagebox and enable resize 2016-05-09 15:05:28 +00:00
mittorn
57f3f03236 Refactor code 2016-05-09 14:03:50 +00:00
mittorn
848b1f8ae6 Keyboard and vibration support 2016-05-08 22:57:35 +00:00
mittorn
aba773d1c0 Pixel format selection spinner 2016-05-08 08:57:07 +00:00
mittorn
3903f06abb Update branches 2016-05-08 08:12:05 +00:00
mittorn
e365040659 Fix screen orientation 2016-05-08 07:59:53 +00:00
mittorn
0211b8720f Update branches, enable openSLES 2016-05-07 22:37:15 +00:00
mittorn
2c8b1ee753 Improve EGL restore 2016-05-07 20:14:09 +00:00
aaa95945
71f1aa6a2d Create strings.xml (#99)
* Create strings.xml

Translate to Chinese!

* Update strings.xml
2016-05-07 19:07:59 +03:00
Deic
3736938bea Create strings.xml (#100)
Spanish language added.
2016-05-07 11:40:46 +03:00
mittorn
69b11fcf38 Implement EGL restore 2016-05-06 22:20:34 +00:00
Alibek Omarov
fe5b7dc7cf Update README.md 2016-05-07 01:50:36 +04:00
mittorn
5b0ee9679c Fix fullscreen 2016-05-06 16:49:42 +00:00
mittorn
441beea431 Fix install 2016-05-06 16:48:21 +00:00
mittorn
46a9d3fac6 Update travis 2016-05-06 15:12:19 +00:00
mittorn
aeee1419a2 Fix and rework launch 2016-05-06 14:58:09 +00:00
mittorn
126433c42c Android 1.5 support 2016-05-06 08:58:01 +00:00
mittorn
11a29ac213 Touch action filter, add keyboard code 2016-05-05 20:01:43 +00:00
mittorn
e33ceda57a Update touch code 2016-05-04 21:34:15 +00:00
mittorn
cd81aa82ea Improve launch, fix touch 2016-05-04 21:02:09 +00:00
mittorn
76cac2a352 Restore build without sdl (only graphics output supported) 2016-05-03 22:24:07 +00:00
mittorn
285c11522d Update branches 2016-05-02 21:37:39 +00:00
mittorn
bc1d9fed7f Fix NullPointerExveption 2016-05-01 13:05:28 +00:00
mittorn
80a1f6c4c8 Autodetect legacy/material 2016-05-01 12:53:36 +00:00
Solexid
156171d77a Update AndroidManifest.xml 2016-05-01 11:37:36 +03:00
Solexid
cc21b87045 Update project.properties 2016-05-01 11:05:12 +03:00
Solexid
19de6ce5ff Update AndroidManifest.xml 2016-05-01 11:02:23 +03:00
Solexid
4f1bc7d68a Icon for folder 2016-05-01 10:43:34 +03:00
Solexid
5ef65c1d5b Update FPicker.java 2016-05-01 10:42:14 +03:00
Solexid
9a98aeb958 Update activity_fpicker.xml 2016-05-01 03:37:23 +03:00
Solexid
6ebca5c330 Fix missing string. 2016-05-01 03:25:20 +03:00
Solexid
0cffe3afe9 Added button to launcher 2016-05-01 03:18:32 +03:00
Solexid
726eab44d9 Fpicker classes 2016-05-01 03:15:27 +03:00
Solexid
45bf7fa453 Added folderpicker layout files 2016-05-01 03:13:28 +03:00
Leo
4195f90e0f Added Persian (Farsi) langauge (#93)
* Create strings.xml

* Added Persian (Farsi) Language

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml
2016-04-29 22:47:04 +03:00
Solexid
8065092976 Illegal call fix 2016-04-29 22:01:59 +03:00
Solexid
631c9c46c0 Import miss 2016-04-29 21:43:56 +03:00
Solexid
4560bd68a0 Strings update 2016-04-29 21:32:26 +03:00
Solexid
a7993ad1c3 Added some java code for tabwork 2016-04-29 21:29:56 +03:00
Solexid
a0b0c6154f First step.Edited layout. 2016-04-29 21:22:34 +03:00
mittorn
a78c93a65a Remove cl_tent.c from omp list 2016-04-24 21:46:13 +00:00
mittorn
8459c0e644 Update branches 2016-04-23 21:31:36 +00:00
mittorn
7986e1631a Update branches 2016-04-22 19:22:27 +00:00
mittorn
d1e8dce81a Experimental opm support 2016-04-22 19:02:06 +00:00
THE-Swank
94b33a11bb Language support: 'Ukrainian' (#86) 2016-04-20 00:09:22 +03:00
Benjamin Stürmer
8c3772a9bf Language support: 'German' (#85) 2016-04-19 20:39:35 +03:00
fuzun
34ee7c1d0f Language fixes (#78) 2016-04-16 21:26:01 +03:00
Alibek Omarov
870c58490b Merge pull request #77 from fuzun/LangSupport
Language support: 'Turkish'
2016-04-16 13:14:33 +03:00
fuzun
880f085b24 Language support: 'Turkish'
Turkish language support.
2016-04-15 21:37:18 +03:00
mittorn
42bbdc2f3c Enable steamcmd in test manifest 2016-04-14 20:53:03 +00:00
mittorn
bb58bdeec9 enable steamcmd, fix steam mobile 2016-04-14 18:00:44 +06:00
mittorn
230c07cc98 Update branches 2016-04-07 17:27:54 +00:00
mittorn
b5950a2972 Fix SDL cflags 2016-04-07 17:25:37 +00:00
a1batross
b09068e655 Bump pak version and apk version 2016-04-02 19:37:09 +03:00
a1batross
c8432f81bb Update submodules 2016-04-02 19:30:03 +03:00
a1batross
2131dc7cfd Update PAK version 2016-03-31 18:25:47 +03:00
a1batross
52deb81710 Check for undefined reference in case 2016-03-31 17:48:04 +03:00
a1batross
5d1f77d324 Temporarily disable Steam support 2016-03-31 17:29:54 +03:00
a1batross
5b117fe69a Update engine 2016-03-31 16:34:17 +03:00
a1batross
14ba7328af Update submodules 2016-03-31 16:08:34 +03:00
mittorn
5a073557ad Update engine, use gravgun temporary 2016-03-27 12:58:05 +00:00
mittorn
0554a17f67 Update engine 2016-03-19 19:36:28 +00:00
mittorn
6edbd62ba1 Update engine 2016-03-15 16:26:34 +00:00
mittorn
2f5536c7b4 Prepare to 0.17-beta.2 2016-03-08 18:35:11 +00:00
mittorn
5b8d6c114c Update 2016-03-06 20:36:44 +00:00
mittorn
e18fcc1e15 Update hlsdk 2016-03-05 21:37:52 +00:00
mittorn
5aa12da666 Update engine 2016-03-05 21:35:52 +00:00
mittorn
498a1f4ac9 Update gen-version script 2016-03-02 08:06:16 +00:00
mittorn
e5a8d1c2c9 Update engine and client 2016-03-01 20:20:56 +00:00
mittorn
3d5374a452 Update engine 2016-03-01 07:20:49 +00:00
mittorn
7d77d01552 Revert code-clean branch 2016-02-29 20:33:10 +00:00
mittorn
2d47dcef2c Update engine 2016-02-29 20:28:25 +00:00
mittorn
4cdc7b93dd Switch to new hlsdk 2016-02-29 20:12:50 +00:00
mittorn
3794611567 Change OnDestroy behaviour 2016-02-28 21:12:07 +00:00
mittorn
8fa32c733c Fix typo 2016-02-28 21:11:40 +00:00
mittorn
19e710f22c Update test manifest 2016-02-28 21:01:15 +00:00
mittorn
3ef85a5863 Update repos 2016-02-28 20:34:14 +00:00
Mittorn
9a4468477d [steamcmd]Update layout, refactor code, fix minor bugs 2016-02-26 20:18:20 +00:00
Mittorn
0978b30e34 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project into steamcmd-wip 2016-02-26 18:04:54 +00:00
Mittorn
c6d419594a Add sikentKillAll, rename preload library 2016-02-26 18:03:44 +00:00
Mittorn
3112adc305 Forgot layout 2016-02-26 08:48:41 +00:00
Mittorn
b0f7475962 WIP steam downloader 2016-02-26 00:05:04 +00:00
a1batross
1ef511f476 Remove untranslatable marks from some strings, add korean translation from #61 2016-02-25 19:05:14 +03:00
mittorn
cbd1905d69 Disable exiting onDestroy as android may kill process while saving config 2016-02-14 19:41:42 +00:00
mittorn
86ac642258 Update engine 2016-02-08 20:22:51 +00:00
mittorn
2f9968742a Update engine 2016-02-06 13:50:12 +00:00
mittorn
f2a22f4017 Update engine 2016-02-06 12:48:00 +00:00
mittorn
963f53a6a4 Update engine to tesing branch 2016-02-04 20:09:12 +00:00
mittorn
bab2279029 Update engine 2016-01-31 11:18:53 +00:00
mittorn
ddfc6ee3cf Bump to 0.17 2016-01-30 21:24:52 +00:00
mittorn
67b7d97557 Update engine, extras 2016-01-30 16:26:37 +00:00
mittorn
2d5682958d Update engine 2016-01-30 15:38:13 +00:00
mittorn
8ce7db0ff0 Update submodule 2016-01-22 11:33:12 +00:00
mittorn
d58289ca78 Update submodule 2016-01-22 11:00:53 +00:00
mittorn
6a296232bc Fix makepak on travis, add tegra2 and armv5 builds 2016-01-22 09:09:43 +00:00
mittorn
2f11dd22ec thumb mode 2016-01-22 09:08:49 +00:00
mittorn
28702daccc Try fix gamepad keys 2016-01-22 08:28:38 +00:00
mittorn
eb1305dbd8 Update engine 2016-01-21 19:52:24 +00:00
mittorn
f70a1d626e Update submodules 2016-01-20 13:03:37 +00:00
mittorn
ee0d139844 Update engine 2016-01-19 20:21:16 +00:00
mittorn
9279cedba4 Update scripts 2016-01-18 17:07:52 +00:00
mittorn
c6533d40f9 Update gen-version.sh 2016-01-18 16:48:37 +00:00
mittorn
4cf64fb370 Update .travis.yml 2016-01-18 16:45:24 +00:00
mittorn
19fc0b3a36 Fix wrong repo uri 2016-01-18 16:41:57 +00:00
mittorn
aa327eae4b Update manifest 2016-01-18 16:41:12 +00:00
mittorn
53c109cda0 Update submodules 2016-01-18 16:36:41 +00:00
mittorn
7bb46ec007 Update xash-extras 2016-01-18 16:09:48 +00:00
a1batross
dafb85eca9 Update about dialog 2016-01-16 14:58:49 +03:00
a1batross
d513081356 Remove MobileTouchControls submodule 2016-01-16 14:17:30 +03:00
a1batross
1972cd8d5f Merge beloko-drop branch 2016-01-16 13:20:59 +03:00
mittorn
b09bc7d82f Add vibration permission to test manifest 2015-12-30 02:56:06 +06:00
a1batross
6306424102 Fix crash 2015-12-30 02:55:19 +06:00
a1batross
fd4695bfbe Add vibration support and swap next/prev weapon
Conflicts:
	assets/next_weap.png
	assets/prev_weap.png
	src/org/libsdl/app/SDLActivity.java
2015-12-30 02:53:07 +06:00
mittorn
38ab0d7325 Drop unneeded resources 2015-12-30 01:09:22 +06:00
mittorn
91cc1af64c Update java part. InstallReceiver, env, verbump 2015-12-30 00:58:35 +06:00
mittorn
34c0b256f6 Update pak version 2015-12-22 01:29:30 +06:00
mittorn
d2f80c14f9 Add xash-extras submodule 2015-12-22 01:28:15 +06:00
mittorn
3b74455dcb Shortcuts improvements 2015-12-20 18:52:09 +06:00
mittorn
073e43a5a4 Skip .git in pak 2015-12-20 17:39:19 +06:00
mittorn
bee8f590a3 Add pak utils 2015-12-20 17:19:32 +06:00
mittorn
cd89009d6b Initial beloko drop-out, add extras envs 2015-12-20 16:39:56 +06:00
mittorn
44279c195f PAK support 2015-12-18 02:34:09 +06:00
a1batross
39c4cfdf81 Fix crash 2015-12-09 00:45:19 +03:00
a1batross
7dfb65760d Add vibration support and swap next/prev weapon 2015-12-06 13:06:26 +03:00
a1batross
aa3e0b7416 Bump to version 0.16.1 2015-11-10 23:17:34 +03:00
a1batross
35cd2cbd63 Update submodules, use hlsdk-client now 2015-11-10 21:16:22 +03:00
Alibek Omarov
6331313d67 Merge pull request #47 from SDLash3D/temp
Launcher and shortcut improvements
2015-11-10 21:13:22 +03:00
mittorn
f8a0acd776 Improvements in launcher and shortcuts 2015-11-08 01:09:57 +06:00
a1batross
0e3e1d8af9 Remove unused line 2015-10-13 03:44:23 +07:00
a1batross
56c06d7c01 Update buildscripts and manifest(set debuggable to false) 2015-10-13 03:43:51 +07:00
a1batross
293805c657 Remove unused line 2015-10-10 22:37:58 +03:00
a1batross
19b2fb76f7 Update buildscripts and manifest(set debuggable to false) 2015-10-10 22:37:09 +03:00
a1batross
561c0d8264 Update submodules, again 2015-10-10 22:34:31 +03:00
a1batross
6c1f867b55 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project 2015-10-06 21:53:31 +03:00
a1batross
99ff4934c6 Update modules 2015-10-06 21:53:20 +03:00
Alibek Omarov
abf0f9df5e Merge pull request #40 from SDLash3D/temp
Update android project
2015-10-06 21:50:41 +03:00
Alibek Omarov
4322764fe2 Update .travis.yml 2015-10-04 12:24:31 +03:00
a1batross
ef278d80a2 0.16 is coming 2015-10-03 23:47:45 +03:00
a1batross
c613a1368d Update submodules 2015-10-03 23:47:14 +03:00
mittorn
30ba1d301b Android project version bump 2015-09-30 02:53:08 +07:00
mittorn
26e6eef233 Update version info, disable buggy fullscreen on 2.3 2015-09-23 00:44:39 +07:00
mittorn
19b5ac81a3 Add volume keys switch, fix recent bugs 2015-09-10 08:30:17 +07:00
a1batross
5bda511154 It's a minimal API when there is no errors in AndroidManifest. Also, with this it works on Android 2.3 2015-09-08 21:27:55 +03:00
mittorn
1f330cb1a8 Revert recent changes, do not unpack assets, disable path check 2015-09-08 00:59:55 +07:00
a1batross
1e2d82ee5d Update xash3d submodule 2015-09-06 14:50:44 +03:00
a1batross
e8d98a5d71 Move project to git-submodules 2015-09-06 12:45:59 +03:00
mittorn
f0fd46bb60 Change controls assets path, add path checks 2015-09-06 06:08:53 +07:00
mittorn
556a814f7c Disable wheapon wheel, enable mouse buttons 2015-09-06 05:15:06 +07:00
mittorn
98d60887b2 Fix icons in TouchControlsEditing 2015-09-05 02:14:52 +07:00
mittorn
82c24fc4cb Move controls assets and settings to gamedir/controls 2015-09-05 01:51:13 +07:00
mittorn
d1252c9a91 Check game.ico after icon.png 2015-09-04 21:06:00 +07:00
mittorn
2b65b71538 Allow start ShortcutActivity from launcher 2015-09-04 20:55:37 +07:00
mittorn
b4ead9c0ac try icon.png first 2015-09-04 19:38:05 +07:00
mittorn
1b894336fc Implement icon loading 2015-09-03 03:52:21 +07:00
mittorn
bf0a8bf50a Add scroll to see all launcher activity context 2015-09-03 03:51:26 +07:00
Alibek Omarov
fb70702f02 Merge pull request #20 from mittorn/master
Global config
2015-08-28 17:30:28 +03:00
mittorn
7b28ad7e28 Fix layout in holo 2015-08-27 02:27:14 +07:00
mittorn
d720e327c9 Global config 2015-08-27 01:46:46 +07:00
Alibek Omarov
b0140727cc Merge pull request #17 from SDLash3D/improve_build
Improve build
2015-08-24 00:55:00 +06:00
mittorn
29aec91121 Fix layout 2015-08-24 00:02:59 +07:00
mittorn
dba7d531e8 Fix yandex upload paths 2015-08-24 00:02:07 +07:00
mittorn
65f6fe58b7 Build three architectures 2015-08-22 07:53:18 +07:00
mittorn
2d9d05f00e Fix spaces, add time to yandex 2015-08-20 15:59:11 +07:00
mittorn
d7c89d1d9b Fir trailing spaces in version info, add date 2015-08-20 14:30:16 +07:00
mittorn
a22678fc46 Yet another try 2015-08-20 13:53:47 +07:00
mittorn
1dda4a0468 Another try 2015-08-20 13:38:55 +07:00
mittorn
38f4a7c144 Fix version information in holo theme 2015-08-20 13:13:01 +07:00
mittorn
a04843e766 Add git versions to about dialog 2015-08-20 12:28:00 +07:00
mittorn
09be317894 Upload to transfer.sh and disable non-arm build 2015-08-20 01:34:33 +07:00
mittorn
80621be0b1 Add overrides for NDK's setup.mk 2015-08-20 01:22:32 +07:00
mittorn
432432adc1 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project 2015-08-19 23:15:54 +07:00
mittorn
c2d7ae230c Handle all key events as keyboard 2015-08-19 22:09:14 +07:00
a1batross
6af532e3b3 Add about page, refactor LauncherActivity, remove unused strings and translations 2015-08-16 22:52:54 +06:00
mittorn
f0275dcc92 New intent filter 2015-08-15 04:38:05 +07:00
mittorn
b634582701 Some cosmetical changes 2015-08-13 01:43:09 +07:00
mittorn
545f14a8b6 Update Application.mk 2015-08-12 23:07:07 +07:00
a1batross
7dbe0f8c89 Use short hashsum 2015-08-11 22:33:24 +06:00
a1batross
01b11823c2 Add sending builded APK to YaDisk 2015-08-11 22:20:53 +06:00
a1batross
15cb862bc2 Update travis.yml 2015-08-11 21:37:38 +06:00
a1batross
e60adf229e Fix typo 2015-08-11 21:22:39 +06:00
a1batross
ed3a634474 Fix in git clone command 2015-08-11 21:11:30 +06:00
a1batross
fb5efe3001 Buildlog limit exceeeded 4Mb. Make it more quiet 2015-08-11 21:06:12 +06:00
a1batross
c73257d155 Another try make it build 2015-08-11 20:54:22 +06:00
a1batross
fd4c08fe76 Yet Another Update .travis.yml 2015-08-11 20:45:37 +06:00
a1batross
6285b271b8 Update travis.yml 2015-08-11 20:34:25 +06:00
a1batross
e840082cb1 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project 2015-08-11 20:00:39 +06:00
a1batross
8b92060588 Fix travis build 2015-08-11 20:00:23 +06:00
Alibek Omarov
cb07de4364 Update README.md 2015-08-11 19:56:50 +06:00
a1batross
253997f228 Silent NDK unpacking 2015-08-11 19:53:03 +06:00
a1batross
2680c60215 Add Travis badge 2015-08-11 19:47:06 +06:00
a1batross
2a465e2ee6 Add Travis CI support 2015-08-11 19:44:12 +06:00
Alibek Omarov
837c384e86 Merge pull request #14 from mittorn/android-test-0.15pre
Android test 0.15pre
2015-08-11 18:11:44 +06:00
mittorn
5b30cf5bc2 Add test build files 2015-07-26 23:26:07 +07:00
mittorn
e87ac3da81 Fix layout 2015-07-26 01:58:21 +06:00
mittorn
b20e90ea24 Add shortcut activity and library mods support 2015-07-26 01:30:00 +06:00
mittorn
fa72090ea1 Use shared prefs and setenv 2015-07-24 06:56:03 +06:00
mittorn
56670e9015 Update layout 2015-07-24 03:58:04 +06:00
Alibek Omarov
beb1dd4838 Merge pull request #6 from SDLash3D/sdl_macro
Sdl macro
2015-06-17 17:03:20 +06:00
mittorn
71a667effe Enable XASH_SDL by default 2015-06-16 22:45:30 +07:00
mittorn
7896fc7ea7 Add x86 optimisations and switch arm ABI to hard-float 2015-06-16 22:06:19 +07:00
mittorn
4c554937a0 Enable optimisations 2015-06-12 18:23:50 +07:00
mittorn
ec977e1307 Enable touch controls 2015-06-12 16:42:36 +07:00
mittorn
94f416ec20 Enable resize and get arguments in XashActivity 2015-06-12 14:32:47 +07:00
mittorn
f65e60703f New activity based on SDLActivity 2015-06-11 14:30:34 +07:00
Alibek Omarov
b47b51e804 Update README.md 2015-05-31 14:59:25 +06:00
Alibek Omarov
06a0f792ff Update README.md 2015-05-31 14:58:37 +06:00
Alibek Omarov
9051f59c57 v0.14.1 2015-05-26 21:51:28 +06:00
Alibek Omarov
e3333ab578 Fix installing on some devices 2015-05-26 21:51:08 +06:00
Alibek Omarov
2a3e142b7f Update version number to 0.14 2015-05-26 17:37:40 +06:00
Alibek Omarov
9fd3917216 Touch controls icon pack by @Nicknekit 2015-05-26 00:25:07 +06:00
Alibek Omarov
017797a668 Launcher (command line arguments) 2015-05-26 00:11:50 +06:00
mittorn
c9e93071c2 Add command line, fix typo, fix build with sdk13 2015-05-25 02:52:29 +07:00
mittorn
08f1b882c8 Merge branch 'master' of https://github.com/SDLash3D/xash3d-android-project 2015-05-25 00:25:47 +07:00
mittorn
39176afce4 Rework Makefiles, enable optimisations, fix links 2015-05-25 00:20:18 +07:00
Alibek Omarov
e6eba27bf5 Disable accelerometer 2015-05-24 14:26:44 +06:00
Alibek Omarov
fe836000cf Delete not needed file, now it compiles 2015-05-23 19:57:00 +06:00
Alibek Omarov
7615914e86 CRLF to LF on all files 2015-05-22 20:59:49 +06:00
Alibek Omarov
58295431a0 Merge pull request #2 from emileb/master
Touch screen additions
2015-05-22 20:41:01 +06:00
Emile Belanger
23f4f980ee Fixed backspace? 2015-05-20 18:00:28 +01:00
Emile Belanger
0bcc0db03f Fixes 2015-05-20 14:42:43 +01:00
Emile Belanger
6418df976c test 2015-05-19 17:56:53 +01:00
Emile Belanger
de3442951d Now uses touchcontrols for all input, no SDL 2015-05-19 17:54:29 +01:00
Emile Belanger
c9c7c268d0 Added Touchscreen control by Emile Belanger 2015-05-19 10:42:14 +01:00
Alibek Omarov
69974c6bf9 Merge pull request #1 from mittorn/master
Remove gamepad hack from SDLActivity
2015-04-30 14:56:44 +06:00
mittorn
ca61f79c07 Fix space with hardware keyboard 2015-04-30 02:46:17 +07:00
mittorn
2621404695 Clean keyboard code 2015-04-28 22:29:01 +00:00
mittorn
0e99d0f280 Merge pull request #1 from SDLash3D/master
Fix freeze after unlock
2015-04-26 19:30:25 +00:00
Alibek Omarov
a20e57ba59 Fix freeze after unlock 2015-04-26 21:04:15 +06:00
Alibek Omarov
fe39a90089 Parallel Make; set -gdwarf-3 for gdb 2015-04-17 20:17:05 +06:00
Alibek Omarov
3f42c7f914 Change version to 0.12 2015-04-17 20:16:02 +06:00
Alibek Omarov
68fb5fc4bc Disable not needed dependency: SDL_image 2015-04-17 20:15:44 +06:00
Alibek Omarov
f2dbcd9532 Change icon 2015-04-17 20:14:06 +06:00
Alibek Omarov
acbd370168 Add README 2015-04-04 22:27:09 +06:00
Alibek Omarov
6501b40644 First blood 2015-04-04 22:20:20 +06:00
492 changed files with 40546 additions and 24567 deletions

View File

@@ -5,6 +5,7 @@ packages:
- freetype-dev
- fontconfig-dev
- opus-dev
- bzip2-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -7,6 +7,7 @@ packages:
- libfreetype-dev
- libfontconfig-dev
- libopus-dev
- libbz2-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -6,6 +6,7 @@ packages:
- libfreetype-dev
- libfontconfig-dev
- libopus-dev
- libbz2-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -6,6 +6,7 @@ packages:
- print/freetype2
- x11-fonts/fontconfig
- audio/opus
- archivers/bzip2
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -6,6 +6,7 @@ packages:
- fontconfig
- libopus
- pkgconf
- bzip2
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -3,6 +3,7 @@ packages:
- python3
- sdl2
- opus
- bzip2
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:

View File

@@ -1,14 +1,13 @@
task:
name: freebsd-14-amd64
freebsd_instance:
image_family: freebsd-14-0
image_family: freebsd-14-2
setup_script:
- pkg update
- pkg install -y pkgconf git sdl2 python fontconfig opus
- pkg install -y pkgconf git sdl2 python fontconfig libvorbis opusfile bzip2 libbacktrace
- git submodule update --init --recursive
test_script:
- ./scripts/cirrus/build_freebsd.sh dedicated
- ./scripts/cirrus/build_freebsd.sh full
- ./scripts/cirrus/build_freebsd.sh
task:
name: freebsd-15-amd64
@@ -16,8 +15,7 @@ task:
image_family: freebsd-15-0-snap
setup_script:
- pkg update
- pkg install -y pkgconf git sdl2 python fontconfig opus
- pkg install -y pkgconf git sdl2 python fontconfig libvorbis opusfile bzip2 libbacktrace
- git submodule update --init --recursive
test_script:
- ./scripts/cirrus/build_freebsd.sh dedicated
- ./scripts/cirrus/build_freebsd.sh full
- ./scripts/cirrus/build_freebsd.sh

View File

@@ -15,19 +15,39 @@ jobs:
include:
# Linux build specifically want oldest Ubuntu as possible
# to be crossdistribution compatible, otherwise use ubuntu-latest
- os: ubuntu-20.04
- os: ubuntu-22.04
targetos: linux
targetarch: amd64
- os: ubuntu-20.04
- os: ubuntu-22.04
targetos: linux
targetarch: i386
# - os: ubuntu-aarch64-20.04
- os: ubuntu-22.04
targetos: linux
targetarch: arm64
cross: true
- os: ubuntu-22.04
targetos: linux
targetarch: armhf
cross: true
- os: ubuntu-24.04 # riscv64 would benefit from having latest compilers
targetos: linux
targetarch: riscv64
cross: true
- os: ubuntu-22.04
targetos: linux
targetarch: ppc64el
cross: true
# - os: ubuntu-aarch64-22.04
# targetos: linux
# targetarch: aarch64
- os: ubuntu-20.04
- os: ubuntu-latest
targetos: linux
targetarch: e2k-8c
cross: true
- os: ubuntu-latest
targetos: android
targetarch: multiarch
# - os: ubuntu-20.04
# - os: ubuntu-22.04
# targetos: motomagx
# targetarch: armv6
@@ -43,15 +63,16 @@ jobs:
- os: windows-2019 # always use the oldest possible for 32-bit because of older compilers, and better support of certain legacy OSes
targetos: win32
targetarch: i386
- os: macos-14 # in GitHub documentation, it's an ARM64 machine
- os: macos-14 # arm64 as per github documentation
targetos: apple
targetarch: arm64
- os: macos-12 # in GitHub documentation, it's an x86 machine
- os: macos-13 # x86 as per github documentation (will they fix it before they deprecate this version?..)
targetos: apple
targetarch: amd64
env:
SDL_VERSION: 2.30.3
SDL_VERSION: 2.32.0
GH_CPU_ARCH: ${{ matrix.targetarch }}
GH_CROSSCOMPILING: ${{ matrix.cross }}
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -70,12 +91,13 @@ jobs:
path: artifacts/*
flatpak:
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
include:
- app: su.xash.Engine.Compat.i386
container:
image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
image: bilelmoussaoui/flatpak-github-actions:freedesktop-24.08
options: --privileged
steps:
- name: Checkout
@@ -83,7 +105,7 @@ jobs:
with:
submodules: recursive
- name: Build flatpak (Compat.i386)
uses: FWGS/flatpak-github-actions/flatpak-builder@v6.3
uses: FWGS/flatpak-github-actions/flatpak-builder@v6.3-fix
with:
bundle: ${{ matrix.app }}.flatpak
manifest-path: scripts/flatpak/${{ matrix.app }}.yml
@@ -102,7 +124,6 @@ jobs:
--yes \
--cleanup-tag \
--repo "$GITHUB_REPOSITORY" || true
sleep 20s
gh run download "$GITHUB_RUN_ID" \
--dir artifacts/ \
--repo "$GITHUB_REPOSITORY"

3
.gitignore vendored
View File

@@ -342,3 +342,6 @@ enc_temp_folder/
# KDevelop4
*.kdev4
# ccls langauge server
.ccls-*

21
.gitmodules vendored
View File

@@ -19,3 +19,24 @@
[submodule "3rdparty/xash-extras"]
path = 3rdparty/extras/xash-extras
url = https://github.com/FWGS/xash-extras
[submodule "3rdparty/bzip2/bzip2"]
path = 3rdparty/bzip2/bzip2
url = https://gitlab.com/bzip2/bzip2
[submodule "3rdparty/MultiEmulator"]
path = 3rdparty/MultiEmulator
url = https://github.com/FWGS/MultiEmulator
[submodule "3rdparty/libogg/libogg"]
path = 3rdparty/libogg/libogg
url = https://github.com/xiph/ogg.git
[submodule "3rdparty/vorbis/vorbis-src"]
path = 3rdparty/vorbis/vorbis-src
url = https://github.com/xiph/vorbis.git
[submodule "3rdparty/opusfile/opusfile"]
path = 3rdparty/opusfile/opusfile
url = https://github.com/xiph/opusfile.git
[submodule "3rdparty/libbacktrace/libbacktrace"]
path = 3rdparty/libbacktrace/libbacktrace
url = https://github.com/ianlancetaylor/libbacktrace
[submodule "3rdparty/maintui"]
path = 3rdparty/maintui
url = https://github.com/numas13/xash3d-maintui.git

1
3rdparty/MultiEmulator vendored Submodule

Submodule 3rdparty/MultiEmulator added at 11ff077ca5

1
3rdparty/bzip2/bzip2 vendored Submodule

Submodule 3rdparty/bzip2/bzip2 added at 66c46b8c94

27
3rdparty/bzip2/wscript vendored Normal file
View File

@@ -0,0 +1,27 @@
#! /usr/bin/env python
# encoding: utf-8
def options(opt):
pass
def configure(conf):
conf.define('_GNU_SOURCE', 1)
conf.define('BZ_NO_STDIO', 1)
if conf.env.DEST_OS == 'win32':
conf.define('BZ_LCCWIN32', 1)
else:
conf.define('BZ_UNIX', 1)
def build(bld):
bld(features = 'subst', source = 'bzip2/bz_version.h.in', target = 'bzip2/bz_version.h', BZ_VERSION='1.1.0-fwgs', name = 'bz_version')
bz_sources = ['bzip2/blocksort.c', 'bzip2/huffman.c', 'bzip2/crctable.c', 'bzip2/randtable.c', 'bzip2/compress.c', 'bzip2/decompress.c', 'bzip2/bzlib.c']
bld.stlib(
source = bz_sources,
target = 'bzip2',
use = 'bz_version',
includes = 'bzip2/',
export_includes = 'bzip2/'
)

View File

@@ -25,5 +25,4 @@ def build(bld):
name = 'extras.pk3',
files = srcdir.ant_glob('**/*'),
relative_to = srcdir,
compresslevel = 0,
install_path = install_path)

View File

@@ -16,9 +16,7 @@ def build(bld):
bld.stlib(source = gl4es_srcdir.ant_glob(['gl/*.c', 'gl/*/*.c', 'glx/hardext.c']),
target = 'gl4es',
features = 'c',
includes = ['gl4es/src', 'gl4es/src/gl', 'gl4es/src/glx', 'gl4es/include'],
defines = ['NOX11', 'NO_GBM', 'NO_INIT_CONSTRUCTOR', 'DEFAULT_ES=2', 'NOEGL', 'NO_LOADER', 'STATICLIB'],
cflags = ['-w', '-fvisibility=hidden', '-std=gnu99'],
subsystem = bld.env.MSVC_SUBSYSTEM,
export_includes = '.')

188
3rdparty/libbacktrace/wscript vendored Normal file
View File

@@ -0,0 +1,188 @@
#! /usr/bin/env python
# encoding: utf-8
from waflib import TaskGen
from waflib.Tools.c_config import DEFKEYS
FRAGMENT_ATOMIC='''int i;
int main(void) {
__atomic_load_n(&i, __ATOMIC_ACQUIRE);
__atomic_store_n(&i, 1, __ATOMIC_RELEASE);
return 0;
}'''
FRAGMENT_SYNC='''int i;
int main (void) {
__sync_bool_compare_and_swap (&i, i, i);
__sync_lock_test_and_set (&i, 1);
__sync_lock_release (&i);
return 0;
}'''
FRAGMENT_GETPAGESIZE='''#include <unistd.h>
int main(void) { return getpagesize() }'''
FRAGMENT_GETEXECNAME='''#include <stdlib.h>
int main(void) { return getexecname() != 0 }'''
FRAGMENT_STRNLEN='''#include <string.h>
int main(int argc, char **argv) { return (int)strnlen(argv[0], 10); }'''
FRAGMENT_DL_ITERATE_PHDR='''#include <%s>
int main(void) { return dl_iterate_phdr(0, 0); }'''
FRAGMENT_FCNTL='''#include <fcntl.h>
int main(void) { return fcntl(0, 0, 0); }'''
FRAGMENT_GETIPINFO='''#include "unwind.h"
struct _Unwind_Context *context;
int ip_before_insn = 0;
int main(void) { return _Unwind_GetIPInfo(context, &ip_before_insn); }'''
FRAGMENT_LOADQUERY='''#include <sys/ldr.h>
#include <sys/debug.h>
int main(void) { return loadquery(0, 0, 0); }'''
FRAGMENT_KERN_PROC='''#include <sys/sysctl.h>
#if !defined(%s) || !defined(KERN_PROC_PATHNAME)
#error
#endif
int main(void) { return 0; }'''
FRAGMENT_LSTAT='''#include <sys/stat.h>
struct stat st;
int main(int argc, char **argv) { return lstat(argv[0], &st); }'''
FRAGMENT_READLINK='''#include <unistd.h>
char buf[100];
int main(int argc, char **argv) { return readlink(argv[0], buf, sizeof(buf)); }'''
def options(opt):
pass
def configure(conf):
# add unsupported platforms here
if conf.env.DEST_OS in ['nswitch', 'psvita', 'dos']:
conf.env.DISABLE_LIBBACKTRACE = True
return
# win32 has it's own dbghelp-based backtrace, that's why we ship PDBs
if conf.env.COMPILER_CC == 'msvc':
conf.env.DISABLE_LIBBACKTRACE = True
return
if not conf.path.find_dir('libbacktrace') or not conf.path.find_dir('libbacktrace/config'):
conf.fatal('Can\'t find libbacktrace submodule. Run `git submodule update --init --recursive`.')
return
if conf.env.DEST_SIZEOF_VOID_P == 8:
conf.define('BACKTRACE_ELF_SIZE', 64)
conf.define('BACKTRACE_XCOFF_SIZE', 64)
else:
conf.define('BACKTRACE_ELF_SIZE', 32)
conf.define('BACKTRACE_XCOFF_SIZE', 32)
conf.define('_ALL_SOURCE', 1)
conf.define('_GNU_SOURCE', 1)
conf.define('_POSIX_PTHREAD_SEMANTICS', 1)
conf.define('_TANDEM_SOURCE', 1)
conf.define('__EXTENSIONS__', 1)
conf.define('_DARWIN_USE_64_BIT_INODE', 1)
conf.define('_LARGE_FILES', 1)
conf.check_large_file(compiler='c', execute=False, mandatory=False) # sets _FILE_OFFSET_BITS
conf.env.CFLAGS_EXTRAFLAGS = conf.filter_cflags(['-funwind-tables', '-g'], [])
if conf.filter_cflags(['-frandom-seed=test'], []):
conf.env.HAVE_FRANDOM_SEED = True
def check_header(hdr):
return {'header_name':hdr, 'msg':'... %s header' % hdr, 'mandatory':False, 'id':hdr}
conf.multicheck(
check_header('dlfcn.h'),
check_header('inttypes.h'),
check_header('link.h'),
check_header('sys/link.h'),
check_header('mach-o/dyld.h'),
check_header('memory.h'),
check_header('stdint.h'),
check_header('stdlib.h'),
check_header('strings.h'),
check_header('string.h'),
check_header('sys/ldr.h'),
check_header('sys/mman.h'),
check_header('sys/stat.h'),
check_header('sys/types.h'),
check_header('tlhelp32.h'),
check_header('unistd.h'),
check_header('windows.h'),
{'fragment':FRAGMENT_ATOMIC, 'msg':'... __atomic extensions', 'define_name':'HAVE_ATOMIC_FUNCTIONS', 'mandatory':False},
{'fragment':FRAGMENT_SYNC, 'msg':'... __sync extensions', 'define_name':'HAVE_SYNC_FUNCTIONS', 'mandatory':False},
{'fragment':FRAGMENT_GETPAGESIZE, 'msg':'... getpagesize function', 'define_name':'HAVE_DECL_GETPAGESIZE', 'mandatory':False},
{'fragment':FRAGMENT_STRNLEN, 'msg':'... strnlen function', 'define_name':'HAVE_DECL_STRNLEN', 'mandatory':False},
{'fragment':FRAGMENT_DL_ITERATE_PHDR % 'link.h', 'msg':'... dl_iterate_phdr function in link.h', 'define_name':'HAVE_DL_ITERATE_PHDR', 'after_tests': ['link.h'], 'mandatory':False},
{'fragment':FRAGMENT_DL_ITERATE_PHDR % 'sys/link.h', 'msg':'... dl_iterate_phdr function in sys/link.h', 'define_name':'HAVE_DL_ITERATE_PHDR', 'after_tests': ['sys/link.h'], 'mandatory':False},
{'fragment':FRAGMENT_FCNTL,'msg':'... fnctl function', 'define_name':'HAVE_FCNTL', 'mandatory':False},
{'fragment':FRAGMENT_GETEXECNAME,'msg':'... getexecname function','define_name':'HAVE_GETEXECNAME', 'mandatory':False},
{'fragment':FRAGMENT_GETIPINFO, 'msg':'... _Unwind_GetIPInfo function', 'define_name':'HAVE_GETIPINFO', 'mandatory':False},
{'fragment':FRAGMENT_KERN_PROC % 'KERN_PROC', 'msg': '... KERN_PROC and KERN_PROC_PATHNAME defines', 'define_name':'HAVE_KERN_PROC', 'mandatory':False},
{'fragment':FRAGMENT_KERN_PROC % 'KERN_PROC_ARGS', 'msg': '... KERN_PROC_ARGS and KERN_PROC_PATHNAME defines', 'define_name':'HAVE_KERN_PROC_ARGS', 'mandatory':False},
{'fragment':FRAGMENT_LOADQUERY, 'msg': '... loadquery function', 'define_name':'HAVE_LOADQUERY', 'mandatory':False},
{'fragment':FRAGMENT_LSTAT, 'msg': '... lstat function', 'define_name':'HAVE_LSTAT', 'mandatory':False},
{'fragment':FRAGMENT_READLINK, 'msg': '... readlink function', 'define_name':'HAVE_READLINK', 'mandatory':False},
# {'lib':'lzma', 'define_name':'HAVE_LIBLZMA', 'uselib_store':'lzma', 'msg':'... lzma library', 'mandatory':False},
# {'lib':'z', 'define_name':'HAVE_ZLIB', 'uselib_store':'z', 'msg':'... zlib library', 'mandatory':False},
# {'lib':'zstd', 'define_name':'HAVE_ZSTD', 'uselib_store':'zstd', 'msg':'... zstd library', 'mandatory':False},
msg='Checking for in parallel'
)
conf.env[DEFKEYS].sort()
conf.write_config_header()
conf.define('BACKTRACE_SUPPORTED', 1)
conf.define('BACKTRACE_USES_MALLOC', 0)
conf.define('BACKTRACE_SUPPORTS_THREADS', 1)
conf.define('BACKTRACE_SUPPORTS_DATA', conf.env.DEST_BINFMT in ['elf', 'mac-o'])
conf.write_config_header('backtrace-supported.h')
@TaskGen.feature('frandomseed')
@TaskGen.after_method('propagate_uselib_vars')
def process_frandom_seed(ctx):
tasks = getattr(ctx, 'compiled_tasks', [])
for task in tasks:
out = task.outputs[0]
task.env.CFLAGS = list(task.env.CFLAGS) # need a copy
task.env.CFLAGS += ['-frandom-seed=%s' % out.path_from(out.ctx.bldnode)]
def build(bld):
if bld.env.DISABLE_LIBBACKTRACE:
return
# we specifically only want mmap-based allocators because calling malloc is not safe from signal handlers
sources = ['atomic.c', 'dwarf.c', 'fileline.c', 'posix.c', 'print.c', 'sort.c', 'state.c', 'backtrace.c', 'simple.c', 'mmap.c', 'mmapio.c']
if bld.env.DEST_BINFMT == 'pe':
sources += ['pecoff.c']
elif bld.env.DEST_BINFMT == 'mac-o':
sources += ['macho.c']
elif bld.env.DEST_BINFMT == 'elf':
sources += ['elf.c']
else:
sources += ['unknown.c']
task = bld.stlib(
source = ['libbacktrace/' + i for i in sources],
target = 'backtrace',
features = 'frandomseed' if bld.env.HAVE_FRANDOM_SEED else '',
use = 'EXTRAFLAGS lzma z zstd',
includes = '. libbacktrace/',
export_defines = 'HAVE_LIBBACKTRACE=1',
export_includes = 'libbacktrace/'
)

1
3rdparty/libogg/libogg vendored Submodule

Submodule 3rdparty/libogg/libogg added at 7cf42ea17a

50
3rdparty/libogg/wscript vendored Normal file
View File

@@ -0,0 +1,50 @@
#! /usr/bin/env python
# encoding: utf-8
def options(opt):
pass
def configure(conf):
if not conf.path.find_dir('libogg') or not conf.path.find_dir('libogg/src'):
conf.fatal('Can\'t find libogg submodule. Run `git submodule update --init --recursive`.')
return
conf.env.INCLUDE_INTTYPES_H = 0
conf.env.INCLUDE_SYS_TYPES_H = 0
conf.env.INCLUDE_STDINT_H = 0
if conf.check_cc(header_name='inttypes.h', mandatory = False):
conf.env.INCLUDE_INTTYPES_H = 1
elif conf.check_cc(header_name='sys/types.h', mandatory = False):
conf.env.INCLUDE_SYS_TYPES_H = 1
elif conf.check_cc(header_name='stdint.h', mandatory = False):
conf.env.INCLUDE_STDINT_H = 1
def build(bld):
sources = bld.path.ant_glob([
'libogg/src/*.c'
])
bld(
features = 'subst',
name = 'libogg_config_types',
source = 'libogg/include/ogg/config_types.h.in',
target = 'libogg/include/ogg/config_types.h',
INCLUDE_INTTYPES_H = bld.env.INCLUDE_INTTYPES_H,
INCLUDE_SYS_TYPES_H = bld.env.INCLUDE_SYS_TYPES_H,
INCLUDE_STDINT_H = bld.env.INCLUDE_STDINT_H,
SIZE16 = 'int16_t',
USIZE16 = 'uint16_t',
SIZE32 = 'int32_t',
USIZE32 = 'uint32_t',
SIZE64 = 'int64_t',
USIZE64 = 'uint64_t'
)
bld.stlib(
source = sources,
target = 'ogg',
use = 'libogg_config_types',
includes = 'libogg/include/',
export_includes = 'libogg/include/'
)

1
3rdparty/maintui vendored Submodule

Submodule 3rdparty/maintui added at 0b6ee5b2d8

32
3rdparty/opus/wscript vendored
View File

@@ -3,6 +3,26 @@
import os
FRAGMENT_VLA='''int main (int argc, char **argv) {
char a[argc];
a[sizeof( a ) - 1] = 0;
int N;
return a[0];
}'''
FRAGMENT_ALLOCA_H='''#include <alloca.h>
int main (void) {
int foo=10;
int * array = alloca(foo);
}'''
FRAGMENT_STDLIB_H='''#include <malloc.h>
#include <stdlib.h>
int main (void) {
int foo=10;
int * array = alloca(foo);
}'''
def options(opt):
pass
@@ -11,6 +31,15 @@ def configure(conf):
conf.fatal('Can\'t find opus submodule. Run `git submodule update --init --recursive`.')
return
# Check for C99 variable-size arrays, or alloca() as fallback
if conf.check_cc(fragment=FRAGMENT_VLA, msg = 'Checking for C99 VLA support', mandatory = False):
conf.define('VAR_ARRAYS', 1)
elif conf.check_cc(fragment=FRAGMENT_ALLOCA_H, msg = 'Checking for alloca in alloca.h header', mandatory = False):
conf.define('USE_ALLOCA', 1)
conf.define('HAVE_ALLOCA_H', 1)
elif conf.check_cc(fragmenmt=FRAGMENT_STDLIB_H, msg = 'Checking for alloca.h in stdlib.h', mandatory = False):
conf.define('USE_ALLOCA', 1)
# TODO: ARM/x86 intrinsics detection
# TODO: maybe call autotools/cmake/meson instead?
@@ -27,7 +56,7 @@ def build(bld):
'opus/celt/opus_custom_demo.c'
])
includes = ['opus/include/', 'opus/celt/', 'opus/silk/', 'opus/silk/float/']
defines = ['USE_ALLOCA', 'OPUS_BUILD', 'FLOAT_APPROX', 'PACKAGE_VERSION="1.3.1"', 'CUSTOM_MODES']
defines = ['OPUS_BUILD', 'FLOAT_APPROX', 'PACKAGE_VERSION="1.4.0"', 'CUSTOM_MODES']
bld.stlib(
source = sources,
@@ -35,6 +64,5 @@ def build(bld):
features = 'c',
includes = includes,
defines = defines,
subsystem = bld.env.MSVC_SUBSYSTEM,
export_includes = ['opus/include/']
)

1
3rdparty/opusfile/opusfile vendored Submodule

37
3rdparty/opusfile/wscript vendored Normal file
View File

@@ -0,0 +1,37 @@
#! /usr/bin/env python
# encoding: utf-8
def options(opt):
pass
def configure(conf):
if not conf.path.find_dir('opusfile') or not conf.path.find_dir('opusfile/src'):
conf.fatal('Can\'t find opusfile submodule. Run `git submodule update --init --recursive`.')
return
if conf.env.COMPILER_CC == 'msvc':
conf.define('_CRT_SECURE_NO_WARNINGS', 1)
conf.define('_CRT_SECURE_NO_DEPRECATE', 1)
conf.define('_CRT_NONSTDC_NO_DEPRECATE', 1)
if conf.env.DEST_OS == 'android':
# HACKHACK: set it to 32 here because opusfile can't be built on Android SDK < 24
# with _FILE_OFFSET_BITS 64 (which it sets automatically in src/internal.h)
# we are not (????) relying on this part of the API, so it should be harmless
conf.define('_FILE_OFFSET_BITS', 32)
def build(bld):
sources = [
'opusfile/src/info.c',
'opusfile/src/internal.c',
'opusfile/src/opusfile.c',
'opusfile/src/stream.c'
]
bld.stlib(
source = sources,
target = 'opusfile',
includes = 'opusfile/include/',
use = 'ogg opus',
export_includes = 'opusfile/include/'
)

1
3rdparty/vorbis/vorbis-src vendored Submodule

71
3rdparty/vorbis/wscript vendored Normal file
View File

@@ -0,0 +1,71 @@
#! /usr/bin/env python
# encoding: utf-8
FRAGMENT_MEMORY_H='''#include <memory.h>
int main (void) {
return 0;
}'''
FRAGMENT_ALLOCA_H='''#include <alloca.h>
int main (void) {
int foo=10;
int * array = alloca(foo);
}'''
def options(opt):
pass
def configure(conf):
if not conf.path.find_dir('vorbis-src') or not conf.path.find_dir('vorbis-src/lib'):
conf.fatal('Can\'t find Vorbis submodule. Run `git submodule update --init --recursive`.')
return
if conf.check_cc(fragment=FRAGMENT_MEMORY_H, msg = 'Checking for memory.h header', mandatory = False):
conf.define('USE_MEMORY_H', 1)
conf.check_cc(fragment=FRAGMENT_ALLOCA_H, msg = 'Checking for alloca in alloca.h header', mandatory = False)
if conf.env.COMPILER_CC == 'msvc':
conf.define('_CRT_SECURE_NO_WARNINGS', 1)
conf.define('_CRT_SECURE_NO_DEPRECATE', 1)
conf.define('_CRT_NONSTDC_NO_DEPRECATE', 1)
def build(bld):
libvorbis_sources = [
'vorbis-src/lib/mdct.c',
'vorbis-src/lib/smallft.c',
'vorbis-src/lib/block.c',
'vorbis-src/lib/envelope.c',
'vorbis-src/lib/window.c',
'vorbis-src/lib/lsp.c',
'vorbis-src/lib/lpc.c',
'vorbis-src/lib/analysis.c',
'vorbis-src/lib/synthesis.c',
'vorbis-src/lib/psy.c',
'vorbis-src/lib/info.c',
'vorbis-src/lib/floor1.c',
'vorbis-src/lib/floor0.c',
'vorbis-src/lib/res0.c',
'vorbis-src/lib/mapping0.c',
'vorbis-src/lib/registry.c',
'vorbis-src/lib/codebook.c',
'vorbis-src/lib/sharedbook.c',
'vorbis-src/lib/lookup.c',
'vorbis-src/lib/bitrate.c'
]
bld.stlib(
source = libvorbis_sources,
target = 'vorbis',
includes = 'vorbis-src/include/',
use = 'ogg',
export_includes = 'vorbis-src/include/'
)
bld.stlib(
source = 'vorbis-src/lib/vorbisfile.c',
target = 'vorbisfile',
includes = 'vorbis-src/include/',
use = 'vorbis',
export_includes = 'vorbis-src/include/'
)

View File

@@ -13,5 +13,6 @@ When `-bugcomp` is specified with argument, it interpreted as flags separated wi
| Flag | Description | Games that require this flag |
| ------- | ----------- | ---------------------------- |
| `peoei` | Reverts `pfnPEntityOfEntIndex` behavior to GoldSrc, where it returns NULL for last player due to incorrect player index comparison | * Counter-Strike: Condition Zero - Deleted Scenes |
| `gsmrf` | Rewrites message at the moment when Game DLL attempts to write an internal engine message, usually specific to GoldSrc protocol. Right now only supports `svc_spawnstaticsound`, more messages added by request. | * MetaMod/AMXModX based mods |
| `gsmrf` | Rewrites message at the moment when Game DLL attempts to write an internal engine message, usually specific to GoldSrc protocol.<br>Right now only supports `svc_spawnstaticsound`, more messages added by request. | * MetaMod/AMXModX based mods |
| `sp_attn_none` | Makes sounds with attenuation zero spatialized, i.e. have a stereo effect. | Possibly, every game that was made for GoldSrc. |
| `get_game_dir_full` | Makes server return full path in server's `pfnGetGameDir` API function | Mods targetting engine before HL 1.1.1.1, according to MetaMod [documentation](http://metamod.org/engine_notes.html#GetGameDir) |

View File

@@ -5,5 +5,10 @@ This can be useful to test engine in Wine without using virtual machines or dual
0. Clone and install https://github.com/mstorsjo/msvc-wine (you can skip CMake part)
1. Set environment variable MSVC_WINE_PATH to the path to installed MSVC toolchain
2. Pre-load wine: `wineserver -k; wineserver -p; wine64 wineboot`
3. Run `./waf configure -T <build-type> --enable-wine-msvc --sdl2=../SDL2_VC`. Configuration step will take more time than usual.
3. Run `PKGCONFIG=/bin/false ./waf configure -T <build-type> --enable-wine-msvc --sdl2=../SDL2_VC`. Configuration step will take more time than usual.
4. .. other typical steps to build from console ...
> [!NOTE]
> Notice the usage of PKGCONFIG=/bin/false here. We're disabling pkg-config so we don't accidentally pull
> system-wide dependencies and force building them from source. In future builds we might set custom
> directory to pull dependencies from, like ffmpeg...

View File

@@ -2,23 +2,27 @@
On this page you can find links where you can support each developer individually, who has provided public sponsorship information.
### [a1batross](https://github.com/a1batross)
## [a1batross](https://github.com/a1batross)
* Initial Xash3D SDL2/Linux port author, Xash3D FWGS engine maintainer, creator of non-commercial Flying With Gauss organization.
* Boosty page: https://boosty.to/a1ba
Initial Xash3D SDL2/Linux port author, Xash3D FWGS engine maintainer, creator of non-commercial Flying With Gauss organization.
### [nekonomicon](https://github.com/nekonomicon)
* [Boosty page](https://boosty.to/a1ba)
* [hlsdk-portable](https://github.com/FWGS/hlsdk-portable), [mdldec](../utils/mdldec), [opensource-mods.md](opensource-mods.md) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=nekonomicon) (*BSD/clang port, PNG support, etc).
* Boosty page: https://boosty.to/nekonomicon
## [nekonomicon](https://github.com/nekonomicon)
### [Velaron](https://github.com/Velaron)
* [cs16-client](https://github.com/Velaron/cs16-client) & [tf15-client](https://github.com/Velaron/tf15-client) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=Velaron) (Android port, voice chat, etc).
* BuyMeACoffee page: https://www.buymeacoffee.com/velaron
[hlsdk-portable](https://github.com/FWGS/hlsdk-portable), [mdldec](../utils/mdldec), [opensource-mods.md](opensource-mods.md) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=nekonomicon) (*BSD/clang port, PNG support, etc).
### [SNMetamorph](https://github.com/SNMetamorph)
* [PrimeXT](https://github.com/SNMetamorph/PrimeXT) & [GoldSrc Monitor](https://github.com/SNMetamorph/goldsrc-monitor) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=SNMetamorph) (Windows port, voice chat, etc).
* BTC: `16GAzK3qei5AwBW7sggXp3yNcFHBtdpxXj`
* ETH (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383`
* USDT (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383`
* USDC (ERC20): `0xb580eeca9756e3881f9d6d026e28db28eb72a383`
* [Boosty page](https://boosty.to/nekonomicon)
## [Velaron](https://github.com/Velaron)
[cs16-client](https://github.com/Velaron/cs16-client) & [tf15-client](https://github.com/Velaron/tf15-client) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=Velaron) (Android port, voice chat, etc).
* [BuyMeACoffee page](https://www.buymeacoffee.com/velaron)
## [SNMetamorph](https://github.com/SNMetamorph)
[PrimeXT](https://github.com/SNMetamorph/PrimeXT) & [GoldSrc Monitor](https://github.com/SNMetamorph/goldsrc-monitor) maintainer and Xash3D FWGS [contributor](https://github.com/FWGS/xash3d-fwgs/commits?author=SNMetamorph) (Windows port, voice chat, etc).
* [Boosty page](https://boosty.to/snmetamorph)
* [Other donation methods](https://snmetamorph.github.io/donate)

View File

@@ -1,150 +0,0 @@
# There are few new commands availiable in xash3d fork:
## Commands:
### ent_create
Create entity with specified classname and key/values
`ent_create <classname> <key> <value> <key> <value> ...`
for example:
`ent_create monster_zombie targetname zomb1`
after creating entity, ent_last_xxx cvars are set to new entity and ent_last_cb called, look at ent_getvars description
### ent_fire
Make some actions on entity
`ent_fire <pattern> <command> <args>`
Availiavle commands:
* Set fields (Only set entity field, does not call any functions):
* health
* gravity
* movetype
* solid
* rendermode
* rendercolor (vector)
* renderfx
* renderamt
* hullmin (vector)
* hullmax (vector)
* Actions
* rename: set entity targetname
* settarget: set entity target (only targetnames)
* setmodel: set entity model (does not update)
* set: set key/value by server library
* See game FGD to get list.
* command takes two arguments
* touch: touch entity by current player.
* use: use entity by current player.
* movehere: place entity in player fov.
* drop2floor: place entity to nearest floor surface
* moveup: move entity to 25 units up
* moveup (value): move by y axis relatively to specified value
* Flags (Set/clear specified flag bit, arg is bit number):
* setflag
* clearflag
* setspawnflag
* clearspawnflag
### ent_info
Print information about entity by identificator
`ent_info <identificator>`
### ent_getvars
Set client cvars containing entity information (useful for [[Scripting]]) and call ent_last_cb
`ent_getvars <identificator>`
These cvars are set:
```
ent_last_name
ent_last_num
ent_last_inst
ent_last_origin
ent_last_class
```
### ent_list
Print short information about antities, filtered by pattern
`ent_list <pattern>`
## Syntax description
### \<identificator\>
* !cross: entity under aim
* Instance code: !\<number\>_\<seria\l>
* set by ent_getvars command
* Entity index
* targetname pattern
### \<pattern\>
Pattern is like identificator, but may filter many entities by classname
### (vector)
used by ent_fire command. vector means three float values, entered without quotes
### key/value
All entities parameters may be set by specifiing key and value strings.
Originally, this mechanizm is used in map/bsp format, but it can be used in enttools too.
Keys and values are passed to server library and processed by entity keyvalue function, setting edict and entity owns parameters.
If value contains spaces, it must be put in quotes:
`ent_fire !cross set origin "0 0 0"`
## Using with scripting
ent_create and ent_getvars commands are setting cvars on client
It can be used with ent_last_cb alias that is executed after setting cvars.
Simple example:
```
ent_create weapon_c4
alias ent_last_cb "ent_fire \$ent_last_inst use"
```
Use weapon_c4 after creating it.
Note that you cannot use many dfferent callbacks at the same time.
You can set entity name by by pattern and create special script, contatning all callbacks.
Example:
example.cfg
```
alias ent_last_cb exec entity_cb.cfg
ent create \<class\> targetname my_ent1_$name
ent_create \<class\> targetname my_ent2_$name
```
entity_cb.cfg
```
if $ent_last_name == my_ent1_$name
:(ent1 actions)
if $ent_last_name == my_ent2_$name
:(ent2 actions)
```
Note that scripting cannot be blocking. You cannot wait for server answer and continue. But you can use small scripts, connected with ent_last_cb command. The best usage is user interaction. You can add touch buttons to screen or call user command menu actions by callbacks.
## Server side
To enable entity tools on server, set sv_enttools_enable to 1
To change maximum number of entities, touched by ent_fire, change sv_enttools_maxfire to required number.
To enable actions on players, set sv_enttools_players to 1.
To enable entity tools for player by nickname, set sv_enttools_godplayer to nickname. Useful to temporary enable from rcon.
To prevent crash on some actions, set host_mapdesign_fatal to 0

View File

@@ -0,0 +1,152 @@
# Entity tools
For some features described below, you need to enable [console scripting](https://github.com/FWGS/xash3d-fwgs/blob/master/Documentation/extensions/console-scripting.md) with command `cmd_scripting 1` in console.
To get more information about it, check another according page related to console scripting.
## Commands description
### ent_create
Create entity with specified classname and key/values.
`ent_create <classname> <key> <value> <key> <value> ...`
For example:
`ent_create monster_zombie targetname zomb1`
After creating entity, ent_last_xxx cvars are set to new entity and ent_last_cb called, look at ent_getvars description.
### ent_fire
Makes some actions on entity.
`ent_fire <pattern> <command> <args>`
#### Available commands:
Set fields (only set entity field, does not call any functions)
* health
* gravity
* movetype
* solid
* rendermode
* rendercolor (vector)
* renderfx
* renderamt
* hullmin (vector)
* hullmax (vector)
Actions
* rename: set entity targetname
* settarget: set entity target (only targetnames)
* setmodel: set entity model (does not update)
* set: set key/value by server library
* See game FGD to get list.
* command takes two arguments
* touch: touch entity by current player.
* use: use entity by current player.
* movehere: place entity in player fov.
* drop2floor: place entity to nearest floor surface
* moveup: move entity to 25 units up
* moveup (value): move by y axis relatively to specified value
Flags (set/clear specified flag bit, arg is bit number):
* setflag
* clearflag
* setspawnflag
* clearspawnflag
### ent_info
Print information about entity by identificator.
`ent_info <identificator>`
### ent_getvars
Set client cvars containing entity information (useful for [scripting](extensions/console-scripting.md)) and then calls ent_last_cb.
`ent_getvars <identificator>`
These cvars are set:
```
ent_last_name
ent_last_num
ent_last_inst
ent_last_origin
ent_last_class
```
### ent_list
Print short information about antities, filtered by pattern.
`ent_list <pattern>`
## Syntax description
#### \<identificator\>
* !cross: entity under aim
* !\<number\>_\<serial\>: instance code
* Set by ent_getvars command
* Entity index
* Targetname pattern
#### \<pattern\>
Pattern is like identificator, but may filter many entities by classname.
#### (vector)
Used by ent_fire command. vector means three float values, entered without quotes.
#### key/value
All entities parameters may be set by specifiing key and value strings.
Originally, this mechanizm is used in map/bsp format, but it can be used in enttools too.
Keys and values are passed to server library and processed by entity keyvalue function, setting edict and entity owns parameters.
If value contains spaces, it must be put in quotes:
`ent_fire !cross set origin "0 0 0"`
## Using with scripting
ent_create and ent_getvars commands are setting cvars on client
It can be used with ent_last_cb alias that is executed after setting cvars.
Simple example:
```
ent_create weapon_c4
alias ent_last_cb "ent_fire \$ent_last_inst use"
```
Use weapon_c4 after creating it.
Note that you cannot use many different callbacks at the same time.
You can set entity name by by pattern and create special script, contatning all callbacks.
Example:
> example.cfg
```
alias ent_last_cb exec entity_cb.cfg
ent create \<class\> targetname my_ent1_$name
ent_create \<class\> targetname my_ent2_$name
```
> entity_cb.cfg
```
if $ent_last_name == my_ent1_$name
:(ent1 actions)
if $ent_last_name == my_ent2_$name
:(ent2 actions)
```
Note that scripting cannot be blocking. You cannot wait for server answer and continue. But you can use small scripts, connected with ent_last_cb command. The best usage is user interaction. You can add touch buttons to screen or call user command menu actions by callbacks.
## Server side configuration
To enable entity tools on server, set sv_enttools_enable to 1
To change maximum number of entities, touched by ent_fire, change sv_enttools_maxfire to required number.

View File

@@ -85,6 +85,9 @@ These strings are specific to Xash3D FWGS.
As Xash3D accidentally supports GoldSrc games, it also supports parsing liblist.gam.\
Xash3D will use this file if gameinfo.txt is absent, or if its modification timestamp is older than liblist.gam.
> [!NOTE]
> Starting from January 2025, Xash3D FWGS doesn't automatically generate gameinfo.txt from liblist.gam. The key conversion table still remains but if you wish to use gameinfo.txt instead of liblist.gam, you can execute `fs_make_gameinfo` in console.
For game creators who plan supporting only Xash3D, using this file is not recommended.
The table below defines conversion rules from liblist.gam to gameinfo.txt. Some keys' interpretation does differ from `gameinfo.txt`, in this case a note will be left. If `liblist.gam` key isn't present in this table, it's ignored.

View File

@@ -0,0 +1,15 @@
# Support for GoldSrc network protocol
This feature is still work-in-progress, but for now it's available for all users, and we appreciate any bug-reports and contributions around it.
For connecting to GoldSrc-based servers, use this command:
```
connect ip:port gs
```
But keep in mind, there are requirement for server to be able to accept connections from Xash3D-based clients: it should use Reunion.
Without this requirement, you will just get "Steam validation rejected" error on connecting.
That is because proper authorization with Steam API is not implemented in engine yet (but we have plans on it).
Also, we encountered that some GoldSrc-based servers are recognizing Xash3D clients as "fake clients" and banning/kicking them. Maybe this problem will be
solved along with better compatibility with GoldSrc behavior, but may be not - we don't know logic behind this fake client checks.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,32 @@
# NAT bypass feature in Xash3D FWGS
Since IPv6 not as widespread as we would like, NAT (Network Address Translation) still being actively used by many internet service providers in an attempts to
mitigate IPv4 addresses exhaustion. In short, they uses one IPv4 address and doing some tricks with ports to represent many other users behind this address.
But this leads to a problem for users: they cannot accept direct
incoming connections anymore. This means that if you are behind provider's NAT and will try to setup Xash3D FWGS server - nobody will be able to connect to it,
and the server will not show up in servers public list.
## Is it possible to avoid this problem?
In most cases, it is possible to bypass NAT with UDP hole punching, and Xash3D FWGS uses this method too. But this method is not 100% guaranteed to work - it depends
on NAT configurations on both server and client side, and there is no way to control it.
First of all, server should not be behind symmetric NAT. You can check your NAT type on [this page](https://www.checkmynat.com/).
If you get "Symmetric NAT" result in this test, that means you cannot setup publicly available server with internet connection that you are using.
Here is more detailed scheme of different NAT types compatibility, it explains are users with different NAT types can connect to each other or not.
Client NAT type on rows, server NAT type on columns:
| *NAT Type* | Full Cone | Restricted Cone | Port Restricted Cone | Symmetric |
| -------------------- | --------- | --------------- | -------------------- | --------- |
| Full Cone | ✔️ | ✔️ | ✔️ | ✔️ |
| Restricted Cone | ✔️ | ✔️ | ✔️ | ✔️ |
| Port Restricted Cone | ✔️ | ✔️ | ✔️ | ❌ |
| Symmetric | ✔️ | ✔️ | ❌ | ❌ |
## How to use NAT bypass feature?
If you are starting server within the game, you need to enable option "*Use NAT Bypass instead of direct mode*" in bottom left corner of screen.
If you are starting dedicated server, you should add console variable `sv_nat 1` to server.cfg file, or add `+sv_nat 1` to server startup parameters.
If you need to connect to server behind NAT, there is separate tab named *NAT* for such servers in server browser. Note that it is useless to add NAT server to favorites,
or somehow trying manually to store it, because it has changing address and port.

View File

@@ -2,10 +2,19 @@
|Name |Version |Why not working |What was made for that
|---- |------- |--------------- |----------------------
|Blue Shift |The latest steam release |Uses vgui2 library which xash3d does not support |Recreated source code here: https://github.com/FWGS/hlsdk-xash3d/tree/bshift
|Counter Strike |1.6(The latest steam release) |Uses vgui2 library which xash3d does not support |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface
|Counter Strike: Condition Zero |The latest steam release |Uses vgui2 library which xash3d does not support |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface
|Counter Strike: Condition Zero - Deleted scenes |The latest steam release |Uses vgui2 library which xash3d does not support |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface
|Day of Defeat |The latest steam release |Uses vgui2 library which xash3d does not support |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface
|Sven-Coop |5.0+ |Uses custom GoldSrc engine |
|Area 51 |Update 1 |Uses outdated BSP31 map format and custom HLFX SDK libraries. |You can try [this tool](https://hlfx.ru/forum/showthread.php?threadid=5250) to convert maps but there no warranty if it works.
|Arrange Mod: Rebirth |v150 |No idea yet. |
|Blue Shift |The latest steam release |Uses vgui2 library which xash3d does not support. |Recreated source code here: https://github.com/FWGS/hlsdk-xash3d/tree/bshift.
|Counter Strike |Beta 6.5- |Uses an old WON HL 1.0.0.16- interface. |
| |1.4 |Has encrypted blob instead of normal client.dll. |You can try [this tool](https://aluigi.altervista.org/papers/hldlldec.zip) to decrypt client.dll but there no warranty if it works.
| |1.5 |Has encrypted blob instead of normal client.dll. |Decrypted blob here: https://csm.dev/threads/cs-1-5-client-dll-decrypted-patched-for-usage.38845.
| |1.6(The latest steam release) |Uses vgui2 library which xash3d does not support. |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface. Recreated Client Source Code here: https://github.com/Velaron/cs16-client.
|Counter Strike: Condition Zero |The latest steam release |Uses vgui2 library which xash3d does not support. |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface. Recreated Client Source Code here: https://github.com/Velaron/cs16-client.
|Counter Strike: Condition Zero - Deleted scenes |The latest steam release |Uses vgui2 library which xash3d does not support. Uses new sequences code on engine-side that was never used in any other mods before. |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface.
|Day of Defeat |The latest steam release |Uses vgui2 library which xash3d does not support. |Some work on vgui2 support was made here: https://github.com/FWGS/xash3d/tree/vinterface.
|Half-Life: Extended |Day One demo |Uses many hooks to GoldSource engine and version check. |Just wait new version or use more old version.
|Icon of Hell |Beta 0.99 |Uses outdated BSP31 map format and paranoia 2 libraries. |You can try [this tool](https://hlfx.ru/forum/showthread.php?threadid=5250) to convert maps and use Paranoia 2: The Savior 1.51 libraries but there no warranty if it works.
|Paranoia 2: The Savior |All builds older 1.51 |Uses an old renderer interface and engine features. |
|Rebellion |1.0 |Uses an old WON HL 1.0.0.16- interface. |Recreated source code here: https://github.com/FWGS/hlsdk-xash3d/tree/rebellion.
|Sven-Coop |5.0+ |Uses custom GoldSrc engine. |
|Time Shadows |Beta 0.1 |Uses Direct3D renderer. |

View File

@@ -32,12 +32,21 @@ Version 1.9 mirrored on github - https://github.com/solidi/hl-mods/tree/master/c
## Cold Ice Ressurection
Mirrored on github - https://github.com/solidi/hl-mods/tree/master/cir
## Counter-Life
Available on ModDB - https://www.moddb.com/mods/counter-life/downloads/cl-version-1-source-code
## Cthulhu
Uploaded to github by Oleg Cherkasky - https://github.com/gunrunners-paradise/Cthulhu-HLmod-SDK
## Deathmatch Classic
Available in Valve's Half-Life repository - https://github.com/ValveSoftware/halflife/tree/master/dmc
## Delta Particles
Available on ModDB - https://www.moddb.com/mods/half-life-delta/downloads/delta-particles-full-sources-maps-and-c-code
## Earth Special Forces
Alpha 2.0 - https://www.gamers-desire.de/details/2830
## ESHQ
Official github repository - https://github.com/adslbarxatov/xash3d-for-ESHQ

View File

@@ -1,15 +1,15 @@
Xash3D FWGS is intended to be easily ported to specific platform, however main issue is maintaining such ports.
Xash3D FWGS is intended to be easily portable for various platforms, however main issue is maintaining such ports.
This page is about merged ports to main source tree and responsible for it developers.
For porting guidelines, look engine-porting-guide.md.
For porting guidelines, read engine-porting-guide.md.
Status:
* **Supported**: active, was confirmed to be fully functional.
* **Supported**: active, confirmed to be fully functional, gets built on CI.
* **Orphaned**: some work was done but not finished or actively tested due to lack of human resources.
* **In progress**: active, under development.
* **Old Engine**: port was for old engine fork
* **Not maintained**: lack of human resources
* **Deprecated**: not supported anymore
* **Old Engine**: port was for old engine fork.
* **Deprecated**: not supported anymore.
Table is sorted by status and platform.
@@ -17,17 +17,22 @@ Table is sorted by status and platform.
| -------- | ------ | ---------- | ----
| Android | Supported | @Velaron |
| *BSD | Supported | @nekonomicon |
| DOS4GW | Supported | @mittorn |
| GNU/Linux | Supported | @a1batross, @mittorn |
| Haiku | Supported | not maintained | Was added by #478 and #483
| macOS | Supported | @sofakng |
| MotoMAGX | Supported | @a1batross |
| PSVita | Supported | @fgsfdsfgs |
| Switch | Supported | @fgsfdsfgs |
| Windows | Supported | @a1batross, @SNMetamorph |
| DOS4GW | Orphaned | N/A | Haven't been confirmed to work for a very long time
| Haiku | Orphaned | N/A | Was added by #478 and #483
| IRIX | Orphaned | N/A | Undone, compiles but requires big endian port
| MotoMAGX | Orphaned | N/A | Should work but the compiler used for this platform is very unstable and easy to crash (it's GCC 3.4)
| SerenityOS | Orphaned | N/A | Works but not throughly tested
| Solaris | Orphaned | N/A | Works but not throughly tested
| WebAssembly System Interface | Orphaned | N/A | Undone, WASI is missing a lot of APIs we want to use
| Dreamcast | In progress | @maximqaxd | [GitHub Repository](https://github.com/maximqaxd/xash3d-fwgs_dc/)
| PSP | In progress | @Crow_bar, @Velaron | [GitHub Repository](https://github.com/Crow-bar/xash3d-fwgs)
| Wii | In progress | Collaborative effort | [GitHub Repository](https://github.com/saucesaft/xash3d-wii)
| Emscripten | Old Engine | not maintained |
| 3DS | Old Engine fork | not maintained | [GitHub Repository](https://github.com/masterfeizz/Xash3DS)
| Oculus Quest | Old Engine fork | @DrBeef | [GitHub Repository](https://github.com/DrBeef/Lambda1VR)
| iOS | Deprecated | not maintained | See GitHub issue #61
| Emscripten | Old Engine | N/A |
| 3DS | Old Engine fork | N/A | [GitHub Repository](https://github.com/masterfeizz/Xash3DS)
| Oculus Quest | Old Engine fork | N/A | [GitHub Repository](https://github.com/DrBeef/Lambda1VR)
| iOS | Deprecated | N/A | See GitHub issue #61

View File

@@ -2,11 +2,14 @@
### Prerequisites
1. Make sure your PSVita is [set up to run homebrew applications](https://vita.hacks.guide/).
2. Install [kubridge](https://github.com/TheOfficialFloW/kubridge/releases/) by copying `kubridge.suprx` to your taiHEN plugins folder (usually `ux0:/tai`) and add it to your `config.txt`, for example:
2. Install [kubridge](https://github.com/TheOfficialFloW/kubridge/releases/). It is recommended to use kubridge version `0.1`, because other versions aren't tested, we don't know are they suitable or not.
Worth to notice, we got reports that automatic plugins management app EasyPlugin have issues with installing kubridge plugin, so it's better to install it manually: by copying `kubridge.suprx` to your taiHEN plugins folder (usually `ux0:/tai`, but could be `ur0:/tai`) and add it to your `config.txt`, for example:
```
*KERNEL
ux0:tai/kubridge.skprx
```
3. Install `libshacccg.suprx` by following [this guide](https://cimmerian.gitbook.io/vita-troubleshooting-guide/shader-compiler/extract-libshacccg.suprx).
### Installation

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,149 @@
# Touch controls configuring
## Introduction
Thanks to mittorn, we have the ability to fully customize the controls in Xash3D. The new config allows you to not only add and change control buttons, but also create custom menus. There is also a built-in visual editor available, which simplifies the customization process without the need for manual file editing.
## Editor mode usage
1. Launch Xash3D and start the game.
2. To enter the edit mode, click on the gear icon (command `touch_enableedit`).
3. In the edit mode, the grid is displayed. The number of cells can be changed with the command `touch_grid_count` (default is 50). The grid can be disabled with the command `touch_grid_enable 0`.
*Touch controls layout editor*
![](images/editor.jpg)
*Touch profiles window*
![](images/touch-profiles.jpg)
*Touch buttons parameters window*
![](images/touch-buttons.jpg)
## Layout editor features
* **Moving buttons**: click on a button, drag it to the desired location, and release.
* **Resizing buttons**: place your first finger on the top left corner of the button, and use your second finger to resize it.
* **Hiding/showing buttons**: select the button (it will turn red), then use the menu:
* **Close**: closes the editing mode (`touch_disableedit`).
* **Reset**: resets the button to its default values.
* **Hide/Show**: hides or shows the button (`touch_hide <name>` / `touch_show <name>`).
## Working with configuration files / console
All changes made in the visual editor are automatically saved to the touch profile file. The files are located in the `touch_profiles` folder inside game directory. The file name depends on the selected profile.
### Common commands in configuration files
```
// Comment: lines starting with // are ignored.
// Swipe zones for movement. Specify how far you need to swipe to speed up.
// The default values are set to be optimal for a small swipe to immediately walk quickly.
touch_forwardzone "0.060000" ; touch_sidezone "0.060000"
// Sensitivity settings (pitch - horizontal, yaw - vertical).
touch_pitch ; touch_yaw
// Grid settings (see above).
touch_grid_count ; touch_grid_enable
// Draws a border around the button.
touch_set_stroke <thickness> <c> <v> <e> <t>
(<r> - red; <g> - green; <b> - blue; <a> - alpha/transparency)
// Show (1) or hide (0) client buttons.
touch_setclientonly
// Removes all buttons from the screen.
touch_removeall
// Shows all available buttons in the configuration file.
touch_list
// Saves the config after editing. You can specify a new file name.
touch_config_file command.cfg
```
*The full list of buttons in the standard `touch.cfg` file, displayed in the console when using `touch_list`.*
![](images/example2.jpg)
## Adding new buttons
To add a new button, use the console command:
```
touch_addbutton "digits" "touch/key_1.png" "toggle_digits" 0.340000 0.782222 0.400000 0.888889 255 255 255 100 0
```
### Parameters of `touch_addbutton` command
| Parameter | Description |
| --- | --- |
| `"digits"` | Unique name of the button. |
| `"touch/key_1.png"` | Path to the icon file (`.png` format). If the icon is not needed, leave `""`. |
| `"toggle_digits"` | Command to execute after clicking (for example, `"buy"` for purchase). |
| `0.340000` | X coordinate of the upper-left corner of the button. |
| `0.782222` | Y coordinate of the upper-left corner of the button. |
| `0.400000` | X coordinate of the lower-right corner of the button. |
| `0.888889` | Y coordinate of the lower-right corner of the button. |
| `255 255 255` | Button color in RGB format. |
| `100` | Button transparency (0 - fully transparent, 255 - fully opaque). |
| `0` | Flags (see next section). |
## List of flags
Flags define the behavior of the button. Their values are powers of two:
| Flag | Value | Description |
| --- | --- | --- |
| `TOUCH_FL_HIDE` | 1 | Hides the button (not displayed in the game, but visible in the editor). |
| `TOUCH_FL_NOEDIT` | 2 | Disables editing of the button in the editor. |
| `TOUCH_FL_CLIENT` | 4 | The button is client-side (not saved in the main control file). |
| `TOUCH_FL_MP` | 8 | The button is displayed only in multiplayer. |
| `TOUCH_FL_SP` | 16 | The button is displayed only in singleplayer. |
| `TOUCH_FL_DEF_SHOW` | 32 | The button is always displayed on startup. |
| `TOUCH_FL_DEF_HIDE` | 64 | The button is always hidden on startup. |
| `TOUCH_FL_DRAW_ADDITIVE` | 128 | The button colors are added together in blend mode. |
| `TOUCH_FL_STROKE` | 256 | Enables outline stroke around the button. |
Flags can be combined by adding their values together. For example, `5 = 1 + 4` is the combination of `TOUCH_FL_HIDE` and `TOUCH_FL_CLIENT` flags, which is a hidden client button.
*In the image below, the `spray`, `scores`, `messagemode` buttons are displayed simultaneously with the flag 8 and `loadquick`, `savequick` with the flag 16, and each is displayed in the corresponding game mode.*
![](images/example1.jpg)
## Useful commands
* `touch_hide <pattern>`: hides buttons by pattern.
* `touch_setcommand`: changes the command bound to a button.
* `touch_settexture`: quickly changes the button image.
* `touch_setcolor`: sets the button color.
* `touch_exportconfig`: exports the current configuration, including aspect ratio.
## Usage examples
* `touch_hide menu*` hides all buttons with names starting with `menu`.
* `touch_setcolor "attack" 255 160 0 128` changes the color of the primary fire button from opaque white to translucent orange, similar to the color of the HUD in Half-Life.
*Result of executing this command*
![](images/example3.jpg)
* Example of adding a new button with a custom icon (the `lastinv` command is used - quick change between weapons)
![](images/example4.jpg)
*View of this button in layout editor*
![](images/example5.jpg)
## Tips
* To prevent the `look` and `move` buttons from interfering with editing other elements, place them before the others in the configuration file.
* And vice versa, to make a button appear on top of others, place it at the end of the configuration file.
* You can assign commands to buttons that change other buttons, see the previous section "Usage examples".
* After editing each parameter of each individual button in the Touch Buttons section, do not forget to press Save, otherwise the applied parameters will not be saved.
* To create your own icon for the button, you can use any graphics editor (for Android, Photo Editor by iudesk is suitable). Saving conditions:
* Image format - `.png` with transparency (e.g. alpha channel)
* Aspect ratio / size - 1:1 / 256x256
* Path to the icons location - `touch/gfx` inside game directory.
### Additional links
* [Handy palette for selecting color in RGB format](https://www.rapidtables.com/web/color/RGB_Color.html)

View File

@@ -1,8 +1,9 @@
# Xash3D FWGS Engine <img align="right" width="128" height="128" src="https://github.com/FWGS/xash3d-fwgs/raw/master/game_launch/icon-xash-material.png" alt="Xash3D FWGS icon" />
[![builds.sr.ht status](https://builds.sr.ht/~a1batross/xash3d-fwgs.svg)](https://builds.sr.ht/~a1batross/xash3d-fwgs?) [![GitHub Actions Status](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [![FreeBSD Build Status](https://img.shields.io/cirrus/github/FWGS/xash3d-fwgs?label=freebsd%20build)](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) [![Discord Server](https://img.shields.io/discord/355697768582610945.svg)](http://fwgsdiscord.mentality.rip/) \
[![Download Stable](https://img.shields.io/badge/download-stable-yellow)](https://github.com/FWGS/xash3d-fwgs/releases/latest) [![Download Testing](https://img.shields.io/badge/downloads-testing-orange)](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous)
[![GitHub Actions Status](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [![FreeBSD Build Status](https://img.shields.io/cirrus/github/FWGS/xash3d-fwgs?label=freebsd%20build)](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) \
[![Discord Server](https://img.shields.io/discord/355697768582610945?logo=Discord&label=International%20Discord%20chat)](http://fwgsdiscord.mentality.rip/) [![Russian speakers Telegram Chat](https://img.shields.io/badge/Russian_speakers_Telegram_chat-gray?logo=Telegram)](https://t.me/flyingwithgauss) \
[![Download Daily Build](https://img.shields.io/badge/downloads-testing-orange)](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous)
Xash3D (pronounced `[ksɑʂ]`) FWGS is a game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow.
Xash3D ([pronounced](https://ipa-reader.com/?text=ks%C9%91%CA%82) `[ksɑʂ]`) FWGS is a game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow.
Xash3D FWGS is a heavily modified fork of an original [Xash3D Engine](https://www.moddb.com/engines/xash3d-engine) by Unkle Mike.
@@ -11,16 +12,17 @@ Xash3D FWGS is a heavily modified fork of an original [Xash3D Engine](https://ww
If you like Xash3D FWGS, consider supporting individual engine maintainers. By supporting us, you help to continue developing this game engine further. The sponsorship links are available in [documentation](Documentation/donate.md).
## Fork features
* Steam Half-Life (HLSDK 2.4) support.
* Steam Half-Life (HLSDK 2.5) support.
* Crossplatform and modern compilers support: supports Windows, Linux, BSD & Android on x86 & ARM and [many more](Documentation/ports.md).
* Better multiplayer support: multiple master servers, headless dedicated server, voice chat and IPv6 support.
* Better multiplayer: multiple master servers, headless dedicated server, voice chat, [GoldSrc protocol support](Documentation/goldsrc-protocol-support.md) and IPv6 support.
* Multiple renderers support: OpenGL, GLESv1, GLESv2 and Software.
* Advanced virtual filesystem: `.pk3` and `.pk3dir` support, compatibility with GoldSrc FS module, fast case-insensitivity emulation for crossplatform.
* Mobility API: better game integration on mobile devices (vibration, touch controls)
* Mobility API: better game integration on mobile devices (vibration, touch controls).
* Different input methods: touch and gamepad in addition to mouse & keyboard.
* TrueType font rendering, as a part of mainui_cpp.
* External VGUI support module.
* PNG & KTX2 image format support.
* Ogg Vorbis (`.ogg`) & Ogg Opus (`.opus`) audio formats support.
* [A set of small improvements](Documentation/), without broken compatibility.
## Installation & Running
@@ -35,17 +37,16 @@ You still needed to copy `valve` directory as all game resources located there.
For additional info, run Xash3D with `-help` command line key.
## Contributing
* Before sending an issue, check if someone already reported your issue. Make sure you're following "How To Ask Questions The Smart Way" guide by Eric Steven Raymond. Read more: http://www.catb.org/~esr/faqs/smart-questions.html
* Issues are accepted in both English and Russian
* Before sending an issue, check if someone already reported your issue. Make sure you're following "How To Ask Questions The Smart Way" guide by Eric Steven Raymond. Read more: http://www.catb.org/~esr/faqs/smart-questions.html.
* Issues are accepted in both English and Russian.
* Before sending a PR, check if you followed our contribution guide in CONTRIBUTING.md file.
## Build instructions
We are using Waf build system. If you have some Waf-related questions, I recommend you to read https://waf.io/book/
We are using Waf build system. If you have some Waf-related questions, I recommend you to read [Waf Book](https://waf.io/book/).
NOTE: NEVER USE GitHub's ZIP ARCHIVES. GitHub doesn't include external dependencies we're using!
**NOTE: NEVER USE GitHub's ZIP ARCHIVES. GitHub doesn't include external dependencies we're using!**
### Prerequisites
If your CPU is x86 compatible and you're on Windows or Linux, we are building 32-bit code by default. This was done to maintain compatibility with Steam releases of Half-Life and based on it's engine games.
Even if Xash3D FWGS does support targetting 64-bit, you can't load games without recompiling them from source code!
@@ -62,31 +63,40 @@ This repository contains our fork of HLSDK and restored source code for Half-Lif
#### GNU/Linux
##### Debian/Ubuntu
* Enable i386 on your system, if you're compiling 32-bit engine on amd64. If not, skip this
* Only for 32-bit engine on 64-bit x86 operating system:
* Enable i386 on your system: `$ sudo dpkg --add-architecture i386`.
* Install `aptitude` ([why?](https://github.com/FWGS/xash3d-fwgs/issues/1828#issuecomment-2415131759)): `$ sudo apt update && sudo apt upgrade && sudo apt install aptitude`
* Install development tools: `$ sudo aptitude --without-recommends install git build-essential gcc-multilib g++-multilib libsdl2-dev:i386 libfreetype-dev:i386 libopus-dev:i386 libbz2-dev:i386 libvorbis-dev:i386 libopusfile-dev:i386 libogg-dev:i386`.
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig`.
`$ sudo dpkg --add-architecture i386`
* Install development tools
* For 32-bit engine on amd64: \
`$ sudo apt install build-essential gcc-multilib g++-multilib python libsdl2-dev:i386 libfontconfig-dev:i386 libfreetype6-dev:i386`
* For everything else: \
`$ sudo apt install build-essential python libsdl2-dev libfontconfig-dev libfreetype6-dev`
* Clone this repostory:
`$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
* Install development tools: `$ sudo apt install git build-essential python libsdl2-dev libfreetype6-dev libopus-dev libbz2-dev libvorbis-dev libopusfile-dev libogg-dev`.
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
##### RedHat/Fedora
* Only for 32-bit engine on 64-bit x86 operating system:
* Install development tools: `$ sudo dnf install git gcc gcc-c++ glibc-devel.i686 SDL2-devel.i686 opus-devel.i686 freetype-devel.i686 bzip2-devel.i686 libvorbis-devel.i686 opusfile-devel.i686 libogg-devel.i686`.
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig`.
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
* Install development tools: `$ sudo dnf install git gcc gcc-c++ SDL2-devel opus-devel freetype-devel bzip2-devel libvorbis-devel opusfile-devel libogg-devel`.
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
### Building
#### Windows (Visual Studio)
0) Open command line
0) Open command line.
1) Navigate to `xash3d-fwgs` directory.
2) Carefully examine which build options are available: `waf --help`
3) Configure build: `waf configure -T release --sdl2=c:/path/to/SDL2`
4) Compile: `waf build`
5) Install: `waf install --destdir=c:/path/to/any/output/directory`
2) (optional) Examine which build options are available: `waf --help`.
3) Configure build: `waf configure --sdl2=c:/path/to/SDL2`.
4) Compile: `waf build`.
5) Install: `waf install --destdir=c:/path/to/any/output/directory`.
#### Linux
If compiling 32-bit on amd64, you may need to supply `export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig` prior to running configure.
If compiling 32-bit on amd64, make sure `PKG_CONFIG_PATH` from the previous step is set correctly, prior to running configure.
0) Examine which build options are available: `./waf --help`
1) Configure build: `./waf configure -T release`
(You need to pass `-8` to compile 64-bit engine on 64-bit x86 processor)
2) Compile: `./waf build`
3) Install(optional): `./waf install --destdir=/path/to/any/output/directory`
0) (optional) Examine which build options are available: `./waf --help`.
1) Configure build: `./waf configure` (you need to pass `-8` to compile 64-bit engine on 64-bit x86 processor).
2) Compile: `./waf build`.
3) Install: `./waf install --destdir=/path/to/any/output/directory`.

14
android/.gitignore vendored Normal file
View File

@@ -0,0 +1,14 @@
.gradle/
build/
.externalNativeBuild
.cxx/
.idea/
local.properties
.project
.classpath
.gradle
.settings
release/
*.hprof
.vscode/
*.bak

View File

@@ -0,0 +1,95 @@
cmake_minimum_required(VERSION 3.22)
# Only used to build Android project
project(XASH_ANDROID)
# armeabi-v7a requires cpufeatures library
if(ANDROID)
include_directories(${ANDROID_NDK}/sources/android/cpufeatures)
add_library(cpufeatures ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)
target_link_libraries(cpufeatures dl)
endif()
include(FindPython)
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(BUILD_TYPE "debug")
else()
set(BUILD_TYPE "release")
list(APPEND WAF_EXTRA_ARGS --enable-poly-opt --enable-lto --enable-limited-debuginfo)
endif()
if(ANDROID_ABI STREQUAL "x86")
# HACKHACK: I don't know why but engine gets built as 64-bit binary here
list(APPEND WAF_EXTRA_ARGS -4)
endif()
set(CMAKE_VERBOSE_MAKEFILE ON)
# not cleanest way to get upper directory
set(ENGINE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../")
set(WAF_CC "${CMAKE_C_COMPILER} --target=${CMAKE_C_COMPILER_TARGET}")
set(WAF_CXX "${CMAKE_CXX_COMPILER} --target=${CMAKE_CXX_COMPILER_TARGET}")
set(WAF ${Python_EXECUTABLE} ${ENGINE_SOURCE_DIR}waf -t ${ENGINE_SOURCE_DIR} -o ${CMAKE_CURRENT_BINARY_DIR}/xash3d-fwgs)
# try to build minimal SDL. Enable features as we're gonna use them
set(SDL_RENDER OFF)
set(SDL_POWER OFF)
set(SDL_VULKAN OFF)
set(SDL_DISKAUDIO OFF)
set(SDL_DUMMYAUDIO OFF)
set(SDL_DUMMYVIDEO OFF)
set(SDL_VULKAN OFF)
set(SDL_OFFSCREEN OFF)
set(SDL_STATIC OFF)
add_subdirectory("${ENGINE_SOURCE_DIR}/3rdparty/SDL" SDL)
include(ExternalProject)
# gradle passes backslashes to cmake, how does this even work for everybody else?
string(REPLACE "\\" "/" CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
ExternalProject_Add(
Xash3DFWGS
SOURCE_DIR ${ENGINE_SOURCE_DIR}
INSTALL_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
BUILD_IN_SOURCE TRUE
DEPENDS SDL2
BUILD_ALWAYS TRUE
LOG_CONFIGURE TRUE
LOG_BUILD TRUE
LOG_INSTALL TRUE
LOG_OUTPUT_ON_FAILURE TRUE
LOG_MERGED_STDOUTERR TRUE
# USES_TERMINAL_CONFIGURE TRUE
# USES_TERMINAL_BUILD TRUE
# USES_TERMINAL_INSTALL TRUE
# NOTE: setting up WAFLOCK is important to avoid possible race conditions
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env
ANDROID_NDK=${ANDROID_NDK}
BUILD_CMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
WAFLOCK=.lock-waf_android_${ANDROID_ABI}_build
${WAF} configure -T ${BUILD_TYPE} --android=${ANDROID_ABI},,${CMAKE_SYSTEM_VERSION}
-s "${ENGINE_SOURCE_DIR}/3rdparty/SDL" --enable-bundled-deps ${WAF_EXTRA_ARGS}
BUILD_COMMAND ${CMAKE_COMMAND} -E env
WAFLOCK=.lock-waf_android_${ANDROID_ABI}_build
${WAF} build -v
INSTALL_COMMAND ${CMAKE_COMMAND} -E env
WAFLOCK=.lock-waf_android_${ANDROID_ABI}_build
${WAF} install --destdir=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
)
add_subdirectory("${ENGINE_SOURCE_DIR}/3rdparty/hlsdk-portable" hlsdk-portable)
# a1ba: without this, xash3d target will be ignored as nothing depends on it
add_dependencies(client Xash3DFWGS)
add_dependencies(server Xash3DFWGS)

View File

@@ -0,0 +1,130 @@
import java.time.LocalDateTime
import java.time.Month
import java.time.temporal.ChronoUnit
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "su.xash.engine"
ndkVersion = "28.0.13004108"
defaultConfig {
applicationId = "su.xash"
applicationIdSuffix = "engine"
versionName = "0.21"
versionCode = getBuildNum()
minSdk = 21
targetSdk = 34
compileSdk = 34
externalNativeBuild {
cmake {
abiFilters("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
arguments("-DANDROID_USE_LEGACY_TOOLCHAIN_FILE=OFF")
}
}
}
externalNativeBuild {
cmake {
version = "3.22.1"
path = file("CMakeLists.txt")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildTypes {
debug {
isMinifyEnabled = false
isShrinkResources = false
isDebuggable = true
applicationIdSuffix = ".test"
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)
}
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)
}
register("asan") {
initWith(getByName("debug"))
}
register("continuous") {
initWith(getByName("release"))
applicationIdSuffix = ".test"
}
}
sourceSets {
getByName("main") {
assets.srcDirs("../../3rdparty/extras/xash-extras", "../moddb")
java.srcDir("../../3rdparty/SDL/android-project/app/src/main/java")
}
}
lint {
abortOnError = false
}
buildFeatures {
viewBinding = true
buildConfig = true
}
androidResources {
noCompress += ""
}
packaging {
jniLibs {
useLegacyPackaging = true
keepDebugSymbols.add("**/*.so")
}
}
}
dependencies {
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
implementation("androidx.cardview:cardview:1.0.0")
implementation("androidx.annotation:annotation:1.7.1")
implementation("androidx.fragment:fragment-ktx:1.6.2")
implementation("androidx.preference:preference-ktx:1.2.1")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("androidx.work:work-runtime-ktx:2.9.0")
// implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation("com.madgag.spongycastle:prov:1.58.0.0")
implementation("in.dragonbra:javasteam:1.2.0")
implementation("ch.acra:acra-http:5.11.2")
}
fun getBuildNum(): Int {
val now = LocalDateTime.now()
val releaseDate = LocalDateTime.of(2015, Month.APRIL, 1, 0, 0, 0)
val qBuildNum = releaseDate.until(now, ChronoUnit.DAYS)
val minuteOfDay = now.hour * 60 + now.minute
return (qBuildNum * 10000 + minuteOfDay).toInt()
}

89
android/app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,89 @@
-keep class su.xash.engine.XashActivity {
java.lang.String loadAndroidID();
java.lang.String getAndroidID();
void saveAndroidID(java.lang.String);
java.lang.String getCallingPackage();
java.lang.String[] getAssetsList(boolean, java.lang.String);
android.content.res.AssetManager getAssets(boolean);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLInputConnection {
void nativeCommitText(java.lang.String, int);
void nativeGenerateScancodeForUnichar(char);
}
-keep,includedescriptorclasses class org.libsdl.app.SDLActivity {
# for some reason these aren't compatible with allowoptimization modifier
boolean supportsRelativeMouse();
void setWindowStyle(boolean);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLActivity {
java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it
boolean onNativeSoftReturnKey();
void onNativeKeyboardFocusLost();
boolean isScreenKeyboardShown();
android.util.DisplayMetrics getDisplayDPI();
java.lang.String clipboardGetText();
boolean clipboardHasText();
void clipboardSetText(java.lang.String);
int createCustomCursor(int[], int, int, int, int);
void destroyCustomCursor(int);
android.content.Context getContext();
boolean getManifestEnvironmentVariables();
android.view.Surface getNativeSurface();
void initTouch();
boolean isAndroidTV();
boolean isChromebook();
boolean isDeXMode();
boolean isTablet();
void manualBackButton();
int messageboxShowMessageBox(int, java.lang.String, java.lang.String, int[], int[], java.lang.String[], int[]);
void minimizeWindow();
int openURL(java.lang.String);
void requestPermission(java.lang.String, int);
int showToast(java.lang.String, int, int, int, int);
boolean sendMessage(int, int);
boolean setActivityTitle(java.lang.String);
boolean setCustomCursor(int);
void setOrientation(int, int, boolean, java.lang.String);
boolean setRelativeMouseEnabled(boolean);
boolean setSystemCursor(int);
boolean shouldMinimizeOnFocusLoss();
boolean showTextInput(int, int, int, int);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.HIDDeviceManager {
boolean initialize(boolean, boolean);
boolean openDevice(int);
int sendOutputReport(int, byte[]);
int sendFeatureReport(int, byte[]);
boolean getFeatureReport(int, byte[]);
void closeDevice(int);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLAudioManager {
int[] getAudioOutputDevices();
int[] getAudioInputDevices();
int[] audioOpen(int, int, int, int, int);
void audioWriteFloatBuffer(float[]);
void audioWriteShortBuffer(short[]);
void audioWriteByteBuffer(byte[]);
void audioClose();
int[] captureOpen(int, int, int, int, int);
int captureReadFloatBuffer(float[], boolean);
int captureReadShortBuffer(short[], boolean);
int captureReadByteBuffer(byte[], boolean);
void captureClose();
void audioSetThreadPriority(boolean, int);
native int nativeSetupJNI();
native void removeAudioDevice(boolean, int);
native void addAudioDevice(boolean, int);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLControllerManager {
void pollInputDevices();
void pollHapticDevices();
void hapticRun(int, float, int);
void hapticStop(int);
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Xash3D FWGS (Test)</string>
<string name="authority" translatable="false">su.xash.engine.test.documents</string>
</resources>

View File

@@ -0,0 +1,26 @@
#!/system/bin/sh
HERE=$(cd "$(dirname "$0")" && pwd)
cmd=$1
shift
# This must be called *before* `LD_PRELOAD` is set. Otherwise, if this is a 32-
# bit app running on a 64-bit device, the 64-bit getprop will fail to load
# because it will preload a 32-bit ASan runtime.
# https://github.com/android/ndk/issues/1744
os_version=$(getprop ro.build.version.sdk)
if [ "$os_version" -eq "27" ]; then
cmd="$cmd -Xrunjdwp:transport=dt_android_adb,suspend=n,server=y -Xcompiler-option --debuggable $@"
elif [ "$os_version" -eq "28" ]; then
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y -Xcompiler-option --debuggable $@"
else
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y $@"
fi
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
ASAN_LIB=$(ls "$HERE"/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
# Workaround for https://github.com/android-ndk/ndk/issues/988.
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
export LD_PRELOAD="$ASAN_LIB"
fi
exec $cmd

View File

@@ -0,0 +1,26 @@
#!/system/bin/sh
HERE=$(cd "$(dirname "$0")" && pwd)
cmd=$1
shift
# This must be called *before* `LD_PRELOAD` is set. Otherwise, if this is a 32-
# bit app running on a 64-bit device, the 64-bit getprop will fail to load
# because it will preload a 32-bit ASan runtime.
# https://github.com/android/ndk/issues/1744
os_version=$(getprop ro.build.version.sdk)
if [ "$os_version" -eq "27" ]; then
cmd="$cmd -Xrunjdwp:transport=dt_android_adb,suspend=n,server=y -Xcompiler-option --debuggable $@"
elif [ "$os_version" -eq "28" ]; then
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y -Xcompiler-option --debuggable $@"
else
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y $@"
fi
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
ASAN_LIB=$(ls "$HERE"/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
# Workaround for https://github.com/android-ndk/ndk/issues/988.
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
export LD_PRELOAD="$ASAN_LIB"
fi
exec $cmd

View File

@@ -0,0 +1,26 @@
#!/system/bin/sh
HERE=$(cd "$(dirname "$0")" && pwd)
cmd=$1
shift
# This must be called *before* `LD_PRELOAD` is set. Otherwise, if this is a 32-
# bit app running on a 64-bit device, the 64-bit getprop will fail to load
# because it will preload a 32-bit ASan runtime.
# https://github.com/android/ndk/issues/1744
os_version=$(getprop ro.build.version.sdk)
if [ "$os_version" -eq "27" ]; then
cmd="$cmd -Xrunjdwp:transport=dt_android_adb,suspend=n,server=y -Xcompiler-option --debuggable $@"
elif [ "$os_version" -eq "28" ]; then
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y -Xcompiler-option --debuggable $@"
else
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y $@"
fi
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
ASAN_LIB=$(ls "$HERE"/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
# Workaround for https://github.com/android-ndk/ndk/issues/988.
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
export LD_PRELOAD="$ASAN_LIB"
fi
exec $cmd

View File

@@ -0,0 +1,26 @@
#!/system/bin/sh
HERE=$(cd "$(dirname "$0")" && pwd)
cmd=$1
shift
# This must be called *before* `LD_PRELOAD` is set. Otherwise, if this is a 32-
# bit app running on a 64-bit device, the 64-bit getprop will fail to load
# because it will preload a 32-bit ASan runtime.
# https://github.com/android/ndk/issues/1744
os_version=$(getprop ro.build.version.sdk)
if [ "$os_version" -eq "27" ]; then
cmd="$cmd -Xrunjdwp:transport=dt_android_adb,suspend=n,server=y -Xcompiler-option --debuggable $@"
elif [ "$os_version" -eq "28" ]; then
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y -Xcompiler-option --debuggable $@"
else
cmd="$cmd -XjdwpProvider:adbconnection -XjdwpOptions:suspend=n,server=y $@"
fi
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
ASAN_LIB=$(ls "$HERE"/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
# Workaround for https://github.com/android-ndk/ndk/issues/988.
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
export LD_PRELOAD="$ASAN_LIB"
fi
exec $cmd

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Xash3D FWGS (Test)</string>
<string name="authority" translatable="false">su.xash.engine.test.documents</string>
</resources>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Xash3D FWGS (Test)</string>
<string name="authority" translatable="false">su.xash.engine.test.documents</string>
</resources>

View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:allowAudioPlaybackCapture="true"
android:installLocation="preferExternal"
tools:targetApi="q">
<!-- OpenGL ES 1.1 -->
<uses-feature android:glEsVersion="0x00010000" />
<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Audio recording support -->
<uses-feature
android:name="android.hardware.microphone"
android:required="false" />
<!-- Allow downloading to the external storage on Android 5.1 and older -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<!-- Allow access to Bluetooth devices -->
<!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
<uses-permission
android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Allow recording audio -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Allow internet access -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Dedicated server -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:name=".MainApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:theme="@style/Theme.App"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".XashActivity"
android:alwaysRetainTaskState="true"
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation|touchscreen"
android:exported="true"
android:launchMode="singleTask"
android:preferMinimalPostProcessing="true"
android:windowSoftInputMode="adjustResize"
tools:targetApi="r">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
</activity>
<provider
android:name=".XashDocumentsProvider"
android:authorities="@string/authority"
android:exported="true"
android:grantUriPermissions="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
</application>
<queries>
<intent>
<action android:name="su.xash.engine.MOD" />
</intent>
</queries>
</manifest>

View File

@@ -0,0 +1,49 @@
package su.xash.engine;
import android.app.Activity;
import android.graphics.Rect;
import android.view.View;
import android.widget.FrameLayout;
public class AndroidBug5497Workaround {
// For more information, see https://code.google.com/p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
public static void assistActivity(Activity activity) {
new AndroidBug5497Workaround(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private AndroidBug5497Workaround(Activity activity) {
FrameLayout content = activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(this::possiblyResizeChildOfContent);
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard / 4)) {
// keyboard probably just became visible
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
// keyboard probably just became hidden
frameLayoutParams.height = usableHeightSansKeyboard;
}
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
}
}

View File

@@ -0,0 +1,4 @@
package su.xash.engine
class DedicatedActivity {
}

View File

@@ -0,0 +1,11 @@
package su.xash.engine
import android.app.Service
import android.content.Intent
import android.os.IBinder
class DedicatedService: Service() {
override fun onBind(intent: Intent?): IBinder? {
TODO("Not yet implemented")
}
}

View File

@@ -0,0 +1,35 @@
package su.xash.engine
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import su.xash.engine.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
navController = navHostFragment.navController
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}

View File

@@ -0,0 +1,28 @@
package su.xash.engine
import android.app.Application
import android.content.Context
import android.os.StrictMode
import org.acra.config.httpSender
import org.acra.data.StringFormat
import org.acra.ktx.initAcra
class MainApplication : Application() {
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
if (!BuildConfig.DEBUG) {
initAcra {
buildConfigClass = BuildConfig::class.java
reportFormat = StringFormat.JSON
httpSender {
uri = "http://bodis.pp.ua:5000/report"
}
}
} else {
// enable strict mode to detect memory leaks etc.
StrictMode.enableDefaults();
}
}
}

View File

@@ -0,0 +1,148 @@
package su.xash.engine;
import android.annotation.SuppressLint;
import android.content.pm.ActivityInfo;
import android.content.res.AssetManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings.Secure;
import android.util.Log;
import android.view.KeyEvent;
import android.view.WindowManager;
import org.libsdl.app.SDLActivity;
public class XashActivity extends SDLActivity {
private boolean mUseVolumeKeys;
private String mPackageName;
private static final String TAG = "XashActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
//getWindow().addFlags(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES);
getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
}
AndroidBug5497Workaround.assistActivity(this);
}
@Override
public void onDestroy()
{
super.onDestroy();
// Now that we don't exit from native code, we need to exit here, resetting
// application state (actually global variables that we don't cleanup on exit)
//
// When the issue with global variables will be resolved, remove that exit() call
System.exit(0);
}
@Override
protected String[] getLibraries() {
return new String[]{"SDL2", "xash"};
}
@SuppressLint("HardwareIds")
private String getAndroidID() {
return Secure.getString(getContentResolver(), Secure.ANDROID_ID);
}
@SuppressLint("ApplySharedPref")
private void saveAndroidID(String id) {
getSharedPreferences("xash_preferences", MODE_PRIVATE).edit().putString("xash_id", id).commit();
}
private String loadAndroidID() {
return getSharedPreferences("xash_preferences", MODE_PRIVATE).getString("xash_id", "");
}
@Override
public String getCallingPackage() {
if (mPackageName != null) {
return mPackageName;
}
return super.getCallingPackage();
}
private AssetManager getAssets(boolean isEngine) {
AssetManager am = null;
if (isEngine) {
am = getAssets();
} else {
try {
am = getPackageManager().getResourcesForApplication(getCallingPackage()).getAssets();
} catch (Exception e) {
Log.e(TAG, "Unable to load mod assets!");
e.printStackTrace();
}
}
return am;
}
private String[] getAssetsList(boolean isEngine, String path) {
AssetManager am = getAssets(isEngine);
try {
return am.list(path);
} catch (Exception e) {
e.printStackTrace();
}
return new String[]{};
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (SDLActivity.mBrokenLibraries) {
return false;
}
int keyCode = event.getKeyCode();
if (!mUseVolumeKeys) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
keyCode == KeyEvent.KEYCODE_CAMERA ||
keyCode == KeyEvent.KEYCODE_ZOOM_IN ||
keyCode == KeyEvent.KEYCODE_ZOOM_OUT) {
return false;
}
}
return getWindow().superDispatchKeyEvent(event);
}
// TODO: REMOVE LATER, temporary launchers support?
@Override
protected String[] getArguments() {
String gamedir = getIntent().getStringExtra("gamedir");
if (gamedir == null) gamedir = "valve";
nativeSetenv("XASH3D_GAME", gamedir);
String gamelibdir = getIntent().getStringExtra("gamelibdir");
if (gamelibdir != null) nativeSetenv("XASH3D_GAMELIBDIR", gamelibdir);
String pakfile = getIntent().getStringExtra("pakfile");
if (pakfile != null) nativeSetenv("XASH3D_EXTRAS_PAK2", pakfile);
mUseVolumeKeys = getIntent().getBooleanExtra("usevolume", false);
mPackageName = getIntent().getStringExtra("package");
String[] env = getIntent().getStringArrayExtra("env");
if (env != null) {
for (int i = 0; i < env.length; i += 2)
nativeSetenv(env[i], env[i + 1]);
}
String argv = getIntent().getStringExtra("argv");
if (argv == null) argv = "-console -log";
return argv.split(" ");
}
}

View File

@@ -0,0 +1,253 @@
package su.xash.engine;
import android.annotation.TargetApi;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Point;
import android.os.Build;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import android.provider.DocumentsProvider;
import android.webkit.MimeTypeMap;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@TargetApi(Build.VERSION_CODES.KITKAT)
public class XashDocumentsProvider extends DocumentsProvider {
private static final String ALL_MIME_TYPES = "*/*";
private File mRootDir;
private static final String TAG = "XashDocumentsProvider";
@Override
public boolean onCreate() {
mRootDir = getContext().getExternalFilesDir(null);
return true;
}
private static final String[] DEFAULT_ROOT_PROJECTION = new String[]{Root.COLUMN_ROOT_ID,
Root.COLUMN_MIME_TYPES,
Root.COLUMN_FLAGS,
Root.COLUMN_ICON,
Root.COLUMN_TITLE,
Root.COLUMN_SUMMARY,
Root.COLUMN_DOCUMENT_ID,
Root.COLUMN_AVAILABLE_BYTES};
private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[]{Document.COLUMN_DOCUMENT_ID,
Document.COLUMN_MIME_TYPE,
Document.COLUMN_DISPLAY_NAME,
Document.COLUMN_LAST_MODIFIED,
Document.COLUMN_FLAGS,
Document.COLUMN_SIZE};
@Override
public Cursor queryRoots(String[] projection) {
final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_ROOT_PROJECTION);
final String appName = getContext().getString(R.string.app_name);
final String docId = getDocIdForFile(mRootDir);
int flags;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH;
} else {
flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD;
}
final MatrixCursor.RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, docId);
row.add(Root.COLUMN_DOCUMENT_ID, docId);
row.add(Root.COLUMN_SUMMARY, null);
row.add(Root.COLUMN_FLAGS, flags);
row.add(Root.COLUMN_TITLE, appName);
row.add(Root.COLUMN_MIME_TYPES, ALL_MIME_TYPES);
row.add(Root.COLUMN_AVAILABLE_BYTES, mRootDir.getFreeSpace());
row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher);
return result;
}
@Override
public Cursor queryDocument(String documentId, String[] projection) throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
includeFile(result, documentId, null);
return result;
}
@Override
public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
final File parent = getFileForDocId(parentDocumentId);
final File[] filesList = parent.listFiles();
if (filesList != null) {
for (File file : filesList) {
includeFile(result, null, file);
}
}
return result;
}
@Override
public ParcelFileDescriptor openDocument(final String documentId, String mode, CancellationSignal signal) throws FileNotFoundException {
final File file = getFileForDocId(documentId);
final int accessMode = ParcelFileDescriptor.parseMode(mode);
return ParcelFileDescriptor.open(file, accessMode);
}
@Override
public AssetFileDescriptor openDocumentThumbnail(String documentId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
final File file = getFileForDocId(documentId);
final ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
return new AssetFileDescriptor(pfd, 0, file.length());
}
@Override
public String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException {
File newFile = new File(parentDocumentId, displayName);
int noConflictId = 1;
while (newFile.exists()) {
newFile = new File(parentDocumentId, displayName + " (" + noConflictId++ + ")");
}
try {
boolean succeeded;
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
succeeded = newFile.mkdir();
} else {
succeeded = newFile.createNewFile();
}
if (!succeeded) {
throw new FileNotFoundException("Failed to create document with id " + newFile.getPath());
}
} catch (IOException e) {
throw new FileNotFoundException("Failed to create document with id " + newFile.getPath());
}
return newFile.getPath();
}
@Override
public void deleteDocument(String documentId) throws FileNotFoundException {
File file = getFileForDocId(documentId);
if (file.isDirectory()) {
if (!deleteDirectory(file)) {
throw new FileNotFoundException("Failed to delete document with id " + documentId);
}
} else if (!file.delete()) {
throw new FileNotFoundException("Failed to delete document with id " + documentId);
}
}
@Override
public String getDocumentType(String documentId) throws FileNotFoundException {
File file = getFileForDocId(documentId);
return getMimeType(file);
}
@Override
public boolean isChildDocument(String parentDocumentId, String documentId) {
return documentId.startsWith(parentDocumentId);
}
private static File getFileForDocId(String docId) throws FileNotFoundException {
final File f = new File(docId);
if (!f.exists()) throw new FileNotFoundException(f.getAbsolutePath() + " not found");
return f;
}
private static String getDocIdForFile(File file) {
return file.getAbsolutePath();
}
private static String getMimeType(File file) {
if (file.isDirectory()) {
return Document.MIME_TYPE_DIR;
} else {
final String name = file.getName();
final int lastDot = name.lastIndexOf('.');
if (lastDot >= 0) {
final String extension = name.substring(lastDot + 1).toLowerCase();
final String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
if (mime != null) return mime;
}
return "application/octet-stream";
}
}
private static boolean deleteDirectory(File dir) {
final File[] allContents = dir.listFiles();
if (allContents != null) {
for (File file : allContents) {
deleteDirectory(file);
}
}
return dir.delete();
}
private void includeFile(MatrixCursor result, String docId, File file) throws FileNotFoundException {
if (docId == null) {
docId = getDocIdForFile(file);
} else {
file = getFileForDocId(docId);
}
int flags = 0;
if (file.isDirectory()) {
if (file.canWrite()) {
flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
}
} else if (file.canWrite()) {
flags |= Document.FLAG_SUPPORTS_WRITE;
}
File parentFile = file.getParentFile();
if (parentFile != null && parentFile.canWrite()) {
flags |= Document.FLAG_SUPPORTS_DELETE;
}
final String displayName = file.getName();
final String mimeType = getMimeType(file);
if (mimeType.startsWith("image/")) {
flags |= Document.FLAG_SUPPORTS_THUMBNAIL;
}
final MatrixCursor.RowBuilder row = result.newRow();
row.add(Document.COLUMN_DOCUMENT_ID, docId);
row.add(Document.COLUMN_DISPLAY_NAME, displayName);
row.add(Document.COLUMN_SIZE, file.length());
row.add(Document.COLUMN_MIME_TYPE, mimeType);
row.add(Document.COLUMN_LAST_MODIFIED, file.lastModified());
row.add(Document.COLUMN_FLAGS, flags);
row.add(Document.COLUMN_ICON, R.mipmap.ic_launcher);
}
}

View File

@@ -0,0 +1,77 @@
package su.xash.engine.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.findNavController
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import su.xash.engine.R
import su.xash.engine.databinding.CardGameBinding
import su.xash.engine.model.Game
import su.xash.engine.ui.library.LibraryViewModel
class GameAdapter(private val libraryViewModel: LibraryViewModel) :
ListAdapter<Game, GameAdapter.GameViewHolder>(DiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameAdapter.GameViewHolder {
val binding = CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return GameViewHolder(binding)
}
override fun onBindViewHolder(holder: GameAdapter.GameViewHolder, position: Int) {
return holder.bind(getItem(position))
}
private class DiffCallback : DiffUtil.ItemCallback<Game>() {
override fun areItemsTheSame(oldItem: Game, newItem: Game): Boolean {
return oldItem.basedir.name == newItem.basedir.name
}
override fun areContentsTheSame(oldItem: Game, newItem: Game): Boolean {
return oldItem.basedir.name == newItem.basedir.name && oldItem.installed == newItem.installed
}
}
inner class GameViewHolder(val binding: CardGameBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(game: Game) {
binding.apply {
gameTitle.text = game.title
if (game.icon != null) {
gameIcon.setImageBitmap(game.icon)
} else {
gameIcon.visibility = View.GONE
}
if (game.cover != null) {
gameCover.setImageBitmap(game.cover)
} else {
gameCover.visibility = View.GONE
}
if (!game.installed) {
launchButton.visibility = View.GONE
settingsButton.visibility = View.GONE
progressIndicator.visibility = View.VISIBLE
return
}
settingsButton.setOnClickListener {
libraryViewModel.setSelectedGame(game)
it.findNavController()
.navigate(R.id.action_libraryFragment_to_gameSettingsFragment)
}
root.setOnClickListener { libraryViewModel.startEngine(it.context, game) }
launchButton.setOnClickListener {
libraryViewModel.startEngine(it.context, game)
}
}
}
}
}

View File

@@ -0,0 +1,89 @@
package su.xash.engine.model
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import androidx.documentfile.provider.DocumentFile
import su.xash.engine.util.TGAReader
import java.util.Scanner
object BackgroundBitmap {
private const val BACKGROUND_ROWS = 3
private const val BACKGROUND_COLUMNS = 4
private const val BACKGROUND_WIDTH = 800
private const val BACKGROUND_HEIGHT = 600
fun createBackground(ctx: Context, file: DocumentFile): Bitmap {
var bitmap =
Bitmap.createBitmap(BACKGROUND_WIDTH, BACKGROUND_HEIGHT, Bitmap.Config.ARGB_8888)
var canvas = Canvas(bitmap)
var x: Int
var y = 0
var width: Int
var height = 0
var bgLayout = file.findFile("resource")?.findFile("HD_BackgroundLayout.txt")
if (bgLayout == null) {
bgLayout = file.findFile("resource")?.findFile("BackgroundLayout.txt")
}
if (bgLayout == null) {
val dir = file.findFile("resource")?.findFile("background")
for (i in 0 until BACKGROUND_ROWS) {
x = 0
for (j in 0 until BACKGROUND_COLUMNS) {
val filename = "${BACKGROUND_WIDTH}_${i + 1}_${'a' + j}_loading.tga"
val bmpFile = dir?.findFile(filename)
val bmpImage = loadTga(ctx, bmpFile!!)
canvas.drawBitmap(bmpImage, x.toFloat(), y.toFloat(), null)
x += bmpImage.width
height = bmpImage.height
}
y += height
}
return bitmap
}
ctx.contentResolver.openInputStream(bgLayout.uri).use { inputStream ->
Scanner(inputStream).use { scanner ->
while (scanner.hasNext()) {
when (val str = scanner.next()) {
"resolution" -> {
width = scanner.nextInt()
height = scanner.nextInt()
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
canvas = Canvas(bitmap)
}
else -> {
var bmpFile = file
str.split("/").forEach { bmpFile = bmpFile.findFile(it)!! }
//skip
scanner.next()
x = scanner.nextInt()
y = scanner.nextInt()
val bmp = loadTga(ctx, bmpFile)
canvas.drawBitmap(bmp, x.toFloat(), y.toFloat(), null)
}
}
}
}
}
return bitmap
}
private fun loadTga(ctx: Context, file: DocumentFile): Bitmap {
ctx.contentResolver.openInputStream(file.uri).use {
val buffer = it?.readBytes()
val pixels = TGAReader.read(buffer, TGAReader.ARGB)
val width = TGAReader.getWidth(buffer)
val height = TGAReader.getHeight(buffer)
return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.ARGB_8888)
}
}
}

View File

@@ -0,0 +1,133 @@
package su.xash.engine.model
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.net.Uri
import android.provider.MediaStore
import androidx.documentfile.provider.DocumentFile
import su.xash.engine.XashActivity
class Game(val ctx: Context, val basedir: DocumentFile, var installed: Boolean = true) {
private var iconName = "game.ico"
var title = "Unknown Game"
var icon: Bitmap? = null
var cover: Bitmap? = null
private val pref = ctx.getSharedPreferences(basedir.name, Context.MODE_PRIVATE)
init {
basedir.findFile("gameinfo.txt")?.let {
parseGameInfo(it)
} ?: basedir.findFile("liblist.gam")?.let { parseGameInfo(it) }
basedir.findFile(iconName)
?.let { icon = MediaStore.Images.Media.getBitmap(ctx.contentResolver, it.uri) }
try {
cover = BackgroundBitmap.createBackground(ctx, basedir)
} catch (e: Exception) {
e.printStackTrace()
}
}
fun startEngine(ctx: Context) {
ctx.startActivity(Intent(ctx, XashActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
putExtra("gamedir", basedir.name)
putExtra("argv", pref.getString("arguments", "-console -log"))
putExtra("usevolume", pref.getBoolean("use_volume_buttons", false))
//.putExtra("gamelibdir", getGameLibDir(context))
//.putExtra("package", getPackageName()) }
})
}
private fun parseGameInfo(file: DocumentFile) {
ctx.contentResolver.openInputStream(file.uri).use { inputStream ->
inputStream?.bufferedReader().use { reader ->
reader?.forEachLine {
val tokens = it.split("\\s+".toRegex(), limit = 2)
if (tokens.size >= 2) {
val k = tokens[0]
val v = tokens[1].trim('"')
if (k == "title" || k == "game") title = v
if (k == "icon") iconName = v
}
}
}
}
}
private fun getPackageName(): String? {
// return if (mDbEntry != null) {
// mDbEntry.getPackageName()
// } else null
return null
}
private fun getGameLibDir(ctx: Context): String? {
val pkgName = getPackageName()
if (pkgName != null) {
val pkgInfo: PackageInfo = try {
ctx.packageManager.getPackageInfo(pkgName, 0)
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
ctx.startActivity(
Intent(
Intent.ACTION_VIEW, Uri.parse("market://details?id=$pkgName")
).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
)
return null
}
return pkgInfo.applicationInfo.nativeLibraryDir
}
return ctx.applicationInfo.nativeLibraryDir
}
companion object {
fun getGames(ctx: Context, file: DocumentFile): List<Game> {
val games = mutableListOf<Game>()
if (checkIfGamedir(file)) {
games.add(Game(ctx, file))
} else {
file.listFiles().forEach {
if (it.isDirectory) {
if (checkIfGamedir(it)) {
games.add(Game(ctx, it))
}
}
}
}
return games
}
fun checkIfGamedir(file: DocumentFile): Boolean {
// exclude unfinished downloads
if (file.name?.startsWith('.') == true)
return false
file.findFile("liblist.gam")?.let { return true }
file.findFile("gameinfo.txt")?.let { return true }
return false
}
}
}
// Intent intent = new Intent("su.xash.engine.MOD");
// for (ResolveInfo info : context.getPackageManager()
// .queryIntentActivities(intent, PackageManager.GET_META_DATA)) {
// String packageName = info.activityInfo.applicationInfo.packageName;
// String gameDir = info.activityInfo.applicationInfo.metaData.getString(
// "su.xash.engine.gamedir");
// Log.d(TAG, "package = " + packageName + " gamedir = " + gameDir);
// }
//public void startEngine(Context context) {
// context.startActivity(new Intent(context, XashActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("gamedir", getGameDir()).putExtra("argv", getArguments()).putExtra("usevolume", getVolumeState()).putExtra("gamelibdir", getGameLibDir(context)).putExtra("package", getPackageName()));
//}

View File

@@ -0,0 +1,59 @@
package su.xash.engine.model
import org.json.JSONArray
import org.json.JSONObject
import java.io.InputStream
class ModDatabase(inputStream: InputStream) {
val entries = mutableListOf<Entry>()
companion object {
const val VERSION = 1
fun getFilename(): String {
return "v${VERSION}.json"
}
}
init {
inputStream.bufferedReader().use {
val jsonArray = JSONArray(it.readText())
for (i in 0..<jsonArray.length()) {
entries.add(Entry(jsonArray.getJSONObject(i)))
}
}
}
fun getByGameDir(gamedir: String): Entry? {
return entries.filter { it.gamedir.equals(gamedir) }.firstOrNull()
}
inner class Entry(jsonObject: JSONObject) {
var name: String? = null
var appid: Int? = null
var gamedir: String? = null
// TODO Depots
var pkgname: String? = null
init {
if (jsonObject.has("name")) {
name = jsonObject.getString("name");
}
if (jsonObject.has("app_id")) {
appid = jsonObject.getInt("app_id");
}
if (jsonObject.has("gamedir")) {
gamedir = jsonObject.getString("gamedir");
}
if (jsonObject.has("package_name")) {
pkgname = jsonObject.getString("package_name");
}
}
}
}

View File

@@ -0,0 +1,101 @@
package su.xash.engine.ui.library
import android.annotation.SuppressLint
import android.content.Intent
import android.content.ActivityNotFoundException
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import kotlinx.coroutines.launch
import su.xash.engine.R
import su.xash.engine.adapters.GameAdapter
import su.xash.engine.databinding.FragmentLibraryBinding
class LibraryFragment : Fragment(), MenuProvider {
private var _binding: FragmentLibraryBinding? = null
private val binding get() = _binding!!
private val libraryViewModel: LibraryViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = FragmentLibraryBinding.inflate(inflater, container, false)
val adapter = GameAdapter(libraryViewModel)
binding.gamesList.adapter = adapter
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.swipeRefresh.setOnRefreshListener { libraryViewModel.reloadGames(requireContext()) }
libraryViewModel.isReloading.observe(viewLifecycleOwner) {
binding.swipeRefresh.isRefreshing = it
}
libraryViewModel.installedGames.observe(viewLifecycleOwner) {
(binding.gamesList.adapter as GameAdapter).submitList(it)
}
libraryViewModel.workInfos.observe(viewLifecycleOwner) {
libraryViewModel.refreshDownloads(requireContext())
}
libraryViewModel.downloads.observe(viewLifecycleOwner) {
libraryViewModel.reloadGames(requireContext())
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_library, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.action_browse -> {
try {
startActivity(
Intent(Intent.ACTION_VIEW).setDataAndType(
null, "vnd.android.document/directory"
)
)
}
catch(e: ActivityNotFoundException) {
Toast.makeText(getActivity(), R.string.library_fragment_no_file_manager, Toast.LENGTH_LONG).show()
}
}
R.id.action_install -> {
findNavController().navigate(R.id.action_libraryFragment_to_setupFragment)
}
R.id.action_settings -> {
findNavController().navigate(R.id.action_libraryFragment_to_appSettingsFragment)
}
}
return false
}
}

View File

@@ -0,0 +1,127 @@
package su.xash.engine.ui.library
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import android.net.Uri
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.preference.PreferenceManager
import androidx.work.Data
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.OutOfQuotaPolicy
import androidx.work.WorkInfo
import androidx.work.WorkManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import su.xash.engine.model.Game
import su.xash.engine.model.ModDatabase
import su.xash.engine.workers.FileCopyWorker
import su.xash.engine.workers.KEY_FILE_URI
import java.util.Locale
const val TAG_INSTALL = "TAG_INSTALL"
class LibraryViewModel(application: Application) : AndroidViewModel(application) {
val installedGames: LiveData<List<Game>> get() = _installedGames
private val _installedGames = MutableLiveData(emptyList<Game>())
val downloads: LiveData<List<Game>> get() = _downloads
private val _downloads = MutableLiveData(emptyList<Game>())
val isReloading: LiveData<Boolean> get() = _isReloading
private val _isReloading = MutableLiveData(false)
private val workManager = WorkManager.getInstance(application.applicationContext)
val workInfos: LiveData<List<WorkInfo>> = workManager.getWorkInfosByTagLiveData(TAG_INSTALL)
val selectedItem: LiveData<Game> get() = _selectedItem
private val _selectedItem = MutableLiveData<Game>()
val appPreferences = application.getSharedPreferences("app_preferences", Context.MODE_PRIVATE)
val modDb: ModDatabase
init {
modDb = application.assets.open(ModDatabase.getFilename()).use { ModDatabase(it) }
reloadGames(application.applicationContext)
}
fun reloadGames(ctx: Context) {
if (isReloading.value == true) {
return
}
_isReloading.value = true
viewModelScope.launch {
withContext(Dispatchers.IO) {
val games = mutableListOf<Game>()
val root = DocumentFile.fromFile(ctx.getExternalFilesDir(null)!!)
val installedGames = Game.getGames(ctx, root)
.filter { p -> _downloads.value?.any { p.basedir.name == it.basedir.name } == false }
games.addAll(installedGames)
downloads.value?.let { games.addAll(it) }
_installedGames.postValue(games)
_isReloading.postValue(false)
}
}
}
fun refreshDownloads(ctx: Context) {
viewModelScope.launch {
withContext(Dispatchers.IO) {
val games = mutableListOf<Game>()
workInfos.value?.filter {
it.state == WorkInfo.State.RUNNING && !it.progress.getString(FileCopyWorker.Input)
.isNullOrEmpty()
}?.forEach {
val uri = Uri.parse(it.progress.getString(FileCopyWorker.Input))
val file = DocumentFile.fromTreeUri(ctx, uri)
games.addAll(Game.getGames(ctx, file!!))
games.forEach { g -> g.installed = false }
}
_downloads.postValue(games)
}
}
}
fun installGame(uri: Uri) {
val data = Data.Builder().putString(KEY_FILE_URI, uri.toString()).build()
val request = OneTimeWorkRequestBuilder<FileCopyWorker>().run {
setInputData(data)
addTag(TAG_INSTALL)
build()
}
workManager.enqueue(request)
}
fun setSelectedGame(game: Game) {
_selectedItem.value = game
}
fun uninstallGame(game: Game) {
viewModelScope.launch {
withContext(Dispatchers.IO) {
game.installed = false
game.basedir.delete()
_installedGames.postValue(_installedGames.value)
}
}
}
fun startEngine(ctx: Context, game: Game) {
game.startEngine(ctx)
}
}

View File

@@ -0,0 +1,31 @@
package su.xash.engine.ui.settings
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import su.xash.engine.databinding.FragmentAppSettingsBinding
class AppSettingsFragment : Fragment() {
private var _binding: FragmentAppSettingsBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = FragmentAppSettingsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
childFragmentManager.beginTransaction()
.add(binding.settingsFragment.id, AppSettingsPreferenceFragment()).commit();
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,12 @@
package su.xash.engine.ui.settings
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import su.xash.engine.R
class AppSettingsPreferenceFragment() : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
preferenceManager.sharedPreferencesName = "app_preferences";
setPreferencesFromResource(R.xml.app_preferences, rootKey);
}
}

View File

@@ -0,0 +1,64 @@
package su.xash.engine.ui.settings
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import su.xash.engine.R
import su.xash.engine.databinding.FragmentGameSettingsBinding
import su.xash.engine.ui.library.LibraryViewModel
class GameSettingsFragment : Fragment() {
private var _binding: FragmentGameSettingsBinding? = null
private val binding get() = _binding!!
private val libraryViewModel: LibraryViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = FragmentGameSettingsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val game = libraryViewModel.selectedItem.value!!
binding.gameCard.apply {
gameTitle.text = game.title
if (game.icon != null) {
gameIcon.setImageBitmap(game.icon)
} else {
gameIcon.visibility = View.GONE
}
if (game.cover != null) {
gameCover.setImageBitmap(game.cover)
} else {
gameCover.visibility = View.GONE
}
buttonsContainer.visibility = View.GONE
}
childFragmentManager.beginTransaction()
.add(binding.settingsFragment.id, GameSettingsPreferenceFragment(game))
.commit();
binding.bottomNavigation.menu.findItem(R.id.action_uninstall).setOnMenuItemClickListener {
libraryViewModel.uninstallGame(game)
findNavController().popBackStack()
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,40 @@
package su.xash.engine.ui.settings
import android.os.Bundle
import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import su.xash.engine.R
import su.xash.engine.model.Game
class GameSettingsPreferenceFragment(val game: Game) : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
preferenceManager.sharedPreferencesName = game.basedir.name;
setPreferencesFromResource(R.xml.game_preferences, rootKey);
val packageList = findPreference<ListPreference>("package_name")!!
packageList.entries = arrayOf(getString(R.string.app_name))
packageList.entryValues = arrayOf(requireContext().packageName)
if (packageList.value == null) {
packageList.setValueIndex(0);
}
val separatePackages = findPreference<SwitchPreferenceCompat>("separate_libraries")!!
val clientPackage = findPreference<ListPreference>("client_package")!!
val serverPackage = findPreference<ListPreference>("server_package")!!
separatePackages.setOnPreferenceChangeListener { _, newValue ->
if (newValue == true) {
packageList.isVisible = false
clientPackage.isVisible = true
serverPackage.isVisible = true
} else {
packageList.isVisible = true
clientPackage.isVisible = false
serverPackage.isVisible = false
}
true
}
}
}

View File

@@ -0,0 +1,48 @@
package su.xash.engine.ui.setup
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.viewpager2.adapter.FragmentStateAdapter
import su.xash.engine.databinding.FragmentSetupBinding
import su.xash.engine.ui.setup.pages.LocationPageFragment
import su.xash.engine.ui.setup.pages.WelcomePageFragment
class SetupFragment : Fragment() {
private var _binding: FragmentSetupBinding? = null
private val binding get() = _binding!!
private val setupViewModel: SetupViewModel by activityViewModels()
private lateinit var setupPageAdapter: SetupPageAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = FragmentSetupBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setupPageAdapter = SetupPageAdapter(this)
binding.viewPager.isUserInputEnabled = false
binding.viewPager.adapter = setupPageAdapter
setupViewModel.pageNumber.observe(viewLifecycleOwner) {
binding.viewPager.setCurrentItem(it, true)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
class SetupPageAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
val pages = listOf(WelcomePageFragment(), LocationPageFragment())
override fun getItemCount(): Int = 2
override fun createFragment(position: Int): Fragment = pages[position]
}

View File

@@ -0,0 +1,25 @@
package su.xash.engine.ui.setup
import android.app.Application
import android.net.Uri
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import su.xash.engine.MainApplication
import su.xash.engine.model.Game
class SetupViewModel(application: Application) : AndroidViewModel(application) {
val pageNumber: LiveData<Int> get() = _pageNumber
private val _pageNumber = MutableLiveData(0)
fun checkIfGameDir(uri: Uri): Boolean {
val ctx = getApplication<MainApplication>().applicationContext
val file = DocumentFile.fromTreeUri(ctx, uri)!!
return Game.checkIfGamedir(file)
}
fun setPageNumber(pos: Int) {
_pageNumber.value = pos
}
}

View File

@@ -0,0 +1,59 @@
package su.xash.engine.ui.setup.pages
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import su.xash.engine.R
import su.xash.engine.databinding.PageLocationBinding
import su.xash.engine.ui.library.LibraryViewModel
import su.xash.engine.ui.setup.SetupViewModel
class LocationPageFragment : Fragment() {
private var _binding: PageLocationBinding? = null
private val binding get() = _binding!!
private val setupViewModel: SetupViewModel by activityViewModels()
private val libraryViewModel: LibraryViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = PageLocationBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.pageButton.setOnClickListener {
getGamesDirectory.launch(null)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private val getGamesDirectory =
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) {
it?.let {
if (!setupViewModel.checkIfGameDir(it)) {
MaterialAlertDialogBuilder(requireContext()).apply {
setTitle(R.string.error)
setMessage(R.string.setup_location_empty)
setPositiveButton(R.string.ok) { dialog, _ -> dialog.dismiss() }
show()
}
} else {
requireContext().contentResolver.takePersistableUriPermission(it, Intent.FLAG_GRANT_READ_URI_PERMISSION)
libraryViewModel.installGame(it)
findNavController().navigate(R.id.action_setupFragment_to_libraryFragment)
}
}
}
}

View File

@@ -0,0 +1,35 @@
package su.xash.engine.ui.setup.pages
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import su.xash.engine.databinding.PageWelcomeBinding
import su.xash.engine.ui.setup.SetupViewModel
class WelcomePageFragment : Fragment() {
private var _binding: PageWelcomeBinding? = null
private val binding get() = _binding!!
private val setupViewModel: SetupViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = PageWelcomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.pageButton.setOnClickListener {
setupViewModel.setPageNumber(1)
}
setupViewModel.setPageNumber(0)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,589 @@
/**
* TGAReader.java
* <p>
* Copyright (c) 2014 Kenji Sasaki
* Released under the MIT license.
* https://github.com/npedotnet/TGAReader/blob/master/LICENSE
* <p>
* English document
* https://github.com/npedotnet/TGAReader/blob/master/README.md
* <p>
* Japanese document
* http://3dtech.jp/wiki/index.php?TGAReader
*/
package su.xash.engine.util;
import java.io.IOException;
public final class TGAReader {
public static final Order ARGB = new Order(16, 8, 0, 24);
public static final Order ABGR = new Order(0, 8, 16, 24);
public static int getWidth(byte[] buffer) {
return (buffer[12] & 0xFF) | (buffer[13] & 0xFF) << 8;
}
public static int getHeight(byte[] buffer) {
return (buffer[14] & 0xFF) | (buffer[15] & 0xFF) << 8;
}
public static int[] read(byte[] buffer, Order order) throws IOException {
// header
// int idFieldLength = buffer[0] & 0xFF;
// int colormapType = buffer[1] & 0xFF;
int type = buffer[2] & 0xFF;
int colormapOrigin = (buffer[3] & 0xFF) | (buffer[4] & 0xFF) << 8;
int colormapLength = (buffer[5] & 0xFF) | (buffer[6] & 0xFF) << 8;
int colormapDepth = buffer[7] & 0xFF;
// int originX = (buffer[8] & 0xFF) | (buffer[9] & 0xFF) << 8; // unsupported
// int originY = (buffer[10] & 0xFF) | (buffer[11] & 0xFF) << 8; // unsupported
int width = getWidth(buffer);
int height = getHeight(buffer);
int depth = buffer[16] & 0xFF;
int descriptor = buffer[17] & 0xFF;
int[] pixels;
// data
switch (type) {
case COLORMAP: {
int imageDataOffset = 18 + (colormapDepth / 8) * colormapLength;
pixels = createPixelsFromColormap(width, height, colormapDepth, buffer, imageDataOffset, buffer, colormapOrigin, descriptor, order);
}
break;
case RGB:
pixels = createPixelsFromRGB(width, height, depth, buffer, 18, descriptor, order);
break;
case GRAYSCALE:
pixels = createPixelsFromGrayscale(width, height, depth, buffer, 18, descriptor, order);
break;
case COLORMAP_RLE: {
int imageDataOffset = 18 + (colormapDepth / 8) * colormapLength;
byte[] decodeBuffer = decodeRLE(width, height, depth, buffer, imageDataOffset);
pixels = createPixelsFromColormap(width, height, colormapDepth, decodeBuffer, 0, buffer, colormapOrigin, descriptor, order);
}
break;
case RGB_RLE: {
byte[] decodeBuffer = decodeRLE(width, height, depth, buffer, 18);
pixels = createPixelsFromRGB(width, height, depth, decodeBuffer, 0, descriptor, order);
}
break;
case GRAYSCALE_RLE: {
byte[] decodeBuffer = decodeRLE(width, height, depth, buffer, 18);
pixels = createPixelsFromGrayscale(width, height, depth, decodeBuffer, 0, descriptor, order);
}
break;
default:
throw new IOException("Unsupported image type: " + type);
}
return pixels;
}
private static final int COLORMAP = 1;
private static final int RGB = 2;
private static final int GRAYSCALE = 3;
private static final int COLORMAP_RLE = 9;
private static final int RGB_RLE = 10;
private static final int GRAYSCALE_RLE = 11;
private static final int RIGHT_ORIGIN = 0x10;
private static final int UPPER_ORIGIN = 0x20;
private static byte[] decodeRLE(int width, int height, int depth, byte[] buffer, int offset) {
int elementCount = depth / 8;
byte[] elements = new byte[elementCount];
int decodeBufferLength = elementCount * width * height;
byte[] decodeBuffer = new byte[decodeBufferLength];
int decoded = 0;
while (decoded < decodeBufferLength) {
int packet = buffer[offset++] & 0xFF;
if ((packet & 0x80) != 0) { // RLE
for (int i = 0; i < elementCount; i++) {
elements[i] = buffer[offset++];
}
int count = (packet & 0x7F) + 1;
for (int i = 0; i < count; i++) {
for (int j = 0; j < elementCount; j++) {
decodeBuffer[decoded++] = elements[j];
}
}
} else { // RAW
int count = (packet + 1) * elementCount;
for (int i = 0; i < count; i++) {
decodeBuffer[decoded++] = buffer[offset++];
}
}
}
return decodeBuffer;
}
private static int[] createPixelsFromColormap(int width, int height, int depth, byte[] bytes, int offset, byte[] palette, int colormapOrigin, int descriptor, Order order) throws IOException {
int[] pixels;
int rs = order.redShift;
int gs = order.greenShift;
int bs = order.blueShift;
int as = order.alphaShift;
switch (depth) {
case 24:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 3 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * i + (width - j - 1)] = color;
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 3 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * (height - i - 1) + (width - j - 1)] = color;
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 3 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * i + j] = color;
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 3 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * (height - i - 1) + j] = color;
}
}
}
}
break;
case 32:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 4 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = palette[index + 3] & 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * i + (width - j - 1)] = color;
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 4 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = palette[index + 3] & 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * (height - i - 1) + (width - j - 1)] = color;
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 4 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = palette[index + 3] & 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * i + j] = color;
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colormapIndex = bytes[offset + width * i + j] &
0xFF - colormapOrigin;
int color = 0xFFFFFFFF;
if (colormapIndex >= 0) {
int index = 4 * colormapIndex + 18;
int b = palette[index] & 0xFF;
int g = palette[index + 1] & 0xFF;
int r = palette[index + 2] & 0xFF;
int a = palette[index + 3] & 0xFF;
color = (r << rs) | (g << gs) | (b << bs) | (a << as);
}
pixels[width * (height - i - 1) + j] = color;
}
}
}
}
break;
default:
throw new IOException("Unsupported depth:" + depth);
}
return pixels;
}
private static int[] createPixelsFromRGB(int width, int height, int depth, byte[] bytes, int offset, int descriptor, Order order) throws IOException {
int[] pixels;
int rs = order.redShift;
int gs = order.greenShift;
int bs = order.blueShift;
int as = order.alphaShift;
switch (depth) {
case 24:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 3 * width * i + 3 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = 0xFF;
pixels[width * i + (width - j - 1)] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 3 * width * i + 3 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = 0xFF;
pixels[width * (height - i - 1) + (width - j - 1)] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 3 * width * i + 3 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = 0xFF;
pixels[width * i + j] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 3 * width * i + 3 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = 0xFF;
pixels[width * (height - i - 1) + j] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
}
}
break;
case 32:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 4 * width * i + 4 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = bytes[index + 3] & 0xFF;
pixels[width * i + (width - j - 1)] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 4 * width * i + 4 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = bytes[index + 3] & 0xFF;
pixels[width * (height - i - 1) + (width - j - 1)] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 4 * width * i + 4 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = bytes[index + 3] & 0xFF;
pixels[width * i + j] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = offset + 4 * width * i + 4 * j;
int b = bytes[index] & 0xFF;
int g = bytes[index + 1] & 0xFF;
int r = bytes[index + 2] & 0xFF;
int a = bytes[index + 3] & 0xFF;
pixels[width * (height - i - 1) + j] = (r << rs) |
(g << gs) |
(b << bs) |
(a << as);
}
}
}
}
break;
default:
throw new IOException("Unsupported depth:" + depth);
}
return pixels;
}
private static int[] createPixelsFromGrayscale(int width, int height, int depth, byte[] bytes, int offset, int descriptor, Order order) throws IOException {
int[] pixels;
int rs = order.redShift;
int gs = order.greenShift;
int bs = order.blueShift;
int as = order.alphaShift;
switch (depth) {
case 8:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + width * i + j] & 0xFF;
int a = 0xFF;
pixels[width * i + (width - j - 1)] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + width * i + j] & 0xFF;
int a = 0xFF;
pixels[width * (height - i - 1) + (width - j - 1)] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + width * i + j] & 0xFF;
int a = 0xFF;
pixels[width * i + j] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + width * i + j] & 0xFF;
int a = 0xFF;
pixels[width * (height - i - 1) + j] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
}
}
break;
case 16:
pixels = new int[width * height];
if ((descriptor & RIGHT_ORIGIN) != 0) {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + 2 * width * i + 2 * j] & 0xFF;
int a = bytes[offset + 2 * width * i + 2 * j + 1] & 0xFF;
pixels[width * i + (width - j - 1)] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
} else {
// LowerRight
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + 2 * width * i + 2 * j] & 0xFF;
int a = bytes[offset + 2 * width * i + 2 * j + 1] & 0xFF;
pixels[width * (height - i - 1) + (width - j - 1)] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
}
} else {
if ((descriptor & UPPER_ORIGIN) != 0) {
// UpperLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + 2 * width * i + 2 * j] & 0xFF;
int a = bytes[offset + 2 * width * i + 2 * j + 1] & 0xFF;
pixels[width * i + j] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
} else {
// LowerLeft
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int e = bytes[offset + 2 * width * i + 2 * j] & 0xFF;
int a = bytes[offset + 2 * width * i + 2 * j + 1] & 0xFF;
pixels[width * (height - i - 1) + j] = (e << rs) |
(e << gs) |
(e << bs) |
(a << as);
}
}
}
}
break;
default:
throw new IOException("Unsupported depth:" + depth);
}
return pixels;
}
private TGAReader() {
}
public static final class Order {
Order(int redShift, int greenShift, int blueShift, int alphaShift) {
this.redShift = redShift;
this.greenShift = greenShift;
this.blueShift = blueShift;
this.alphaShift = alphaShift;
}
public int redShift;
public int greenShift;
public int blueShift;
public int alphaShift;
}
}

View File

@@ -0,0 +1,97 @@
package su.xash.engine.workers
import android.content.Context
import android.net.Uri
import androidx.documentfile.provider.DocumentFile
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
const val KEY_FILE_URI = "KEY_FILE_URI"
class FileCopyWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) {
companion object {
const val Input = "Input"
const val Progress = "Progress"
}
private var fileCount = 0
private var fileCopied = 0
override suspend fun doWork(): Result {
withContext(Dispatchers.IO) {
val fileUri = inputData.getString(KEY_FILE_URI)
setProgress(workDataOf(Input to fileUri))
val uri = Uri.parse(fileUri)
val source = DocumentFile.fromTreeUri(applicationContext, uri)
fileCount = source?.countDirFiles() ?: return@withContext Result.failure()
setProgress(workDataOf(Progress to 0f))
val gamedir = source.name!!
val externalFilesDir = DocumentFile.fromFile(applicationContext.getExternalFilesDir(null)!!)
// create a directory to store staged files
val target = externalFilesDir.createDirectory(".$gamedir")!!
source.copyDirTo(applicationContext, this@FileCopyWorker, target)
target.renameTo(gamedir)
setProgress(workDataOf(Progress to 1f))
}
return Result.success()
}
suspend fun fileCopied(count: Int) {
if(count == 0)
return
fileCopied += count
val percentage: Float = fileCopied.toFloat() / fileCount.toFloat();
setProgress(workDataOf(Progress to percentage))
}
}
fun DocumentFile.countDirFiles(): Int {
var count: Int = 0
listFiles().forEach {
if (it.isDirectory)
count += it.countDirFiles()
else
count++
}
return count
}
fun DocumentFile.copyFileTo(ctx: Context, file: DocumentFile) {
val outFile = file.createFile("application", name!!)!!
ctx.contentResolver.openOutputStream(outFile.uri).use { os ->
ctx.contentResolver.openInputStream(uri).use {
it?.copyTo(os!!)
}
}
}
suspend fun DocumentFile.copyDirTo(ctx: Context, worker: FileCopyWorker, dir: DocumentFile) {
var count: Int = 0
listFiles().forEach {
if (it.isDirectory) {
val outDir = dir.createDirectory(it.name!!)!!
it.copyDirTo(ctx, worker, outDir)
} else {
it.copyFileTo(ctx, dir)
count++
}
}
worker.fileCopied(count)
}

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z" />
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M20,6h-8l-2,-2L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,8c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,8h16v10z" />
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M21,10h-8.35C11.83,7.67 9.61,6 7,6c-3.31,0 -6,2.69 -6,6s2.69,6 6,6c2.61,0 4.83,-1.67 5.65,-4H13l2,2l2,-2l2,2l4,-4.04L21,10zM7,15c-1.65,0 -3,-1.35 -3,-3c0,-1.65 1.35,-3 3,-3s3,1.35 3,3C10,13.65 8.65,15 7,15z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#000000"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7z" />
</vector>

Some files were not shown because too many files have changed in this diff Show More