Commit Graph

265 Commits

Author SHA1 Message Date
Garux 0e0a295330 * new: bsp export/import in json format; Usage: q3map2 -json <-unpack|-pack> [-v] <mapname> 2021-09-23 03:11:43 +03:00
Garux 29ba8c4876 refactor command line arguments parsing 2021-09-19 11:58:00 +03:00
Garux b78513f9f8 refactor InitPaths()
get rid of MAX_OS_PATH
2021-09-17 19:50:36 +03:00
Garux 97ad9bf5c5 separate path manipulating functions
unlimit VFS_MAXDIRS
2021-09-15 08:07:05 +03:00
Garux e1186dd734 subdivide files 2021-09-13 22:29:44 +03:00
Garux ef635cd95c remove direct uses of MAIN_C macro 2021-09-13 16:33:29 +03:00
Garux 68b8d7d5dc refactor game configs: using class inheritance to avoid massive duplication 2021-09-13 16:11:01 +03:00
Garux 18c741a960 remove unused side_t field 2021-09-08 19:45:04 +03:00
Garux 204c3138e2 emit warning on expected practical engine fog limit overflow 2021-09-07 08:14:04 +03:00
Garux 43b5148447 remove -metaMaxBBoxDistance
with current 'pre weld' strategy it's not optimization anymore, also wont work as option to merge non welded triangles with adjusted meta score
2021-09-05 14:45:01 +03:00
Garux 7f8e548c2f * hasten MergeMetaTriangles greatly (around 30 times in worst case)
this has negative impact on surfaces count in certain scenario (big axial surface of easily mergable triangles)
it wins predecessor once we rotate such surface
so may be consider choosing sorting plane per lump or mergables
algorithm itself is dependent on test data ordering, thus best option would be tweaking it, not prerequisites
`redundant indexes suppressed` count is always worse with this due to sorting nature, sorting per axial plane helps
assuming this optimization is not important and case dependent
2021-09-01 20:16:57 +03:00
Garux f067b5d6c3 tweak -meta 2021-08-28 18:37:22 +03:00
Garux 160c1d33db remove -texrange business (assuming it's not relevant for decades)
optimize -meta (shave off 1/3 in worst case)
2021-08-27 12:18:56 +03:00
Garux 1372ea440b more move semantics 2021-08-15 15:15:30 +03:00
Garux f492ab27eb more c++ in q3map2 2021-08-10 22:41:43 +03:00
Garux 99f4a4a767 minor tweaks 2021-08-03 20:54:21 +03:00
Garux 357f67f237 remove Q_EXTERN int numLights
remove /* potential pre-setup  */ :
1. it seems to never actually be the case
2. it is called from threaded functions, while SetupEnvelopes() itself is not thread safe
2021-08-03 18:26:47 +03:00
Garux f49639c697 std::list<light_t> lights 2021-08-03 07:28:53 +03:00
Garux 15b391cdb3 minor tweaks 2021-08-02 00:47:18 +03:00
Garux e8996d0857 using facelist_t = std::forward_list<face_t> 2021-08-01 22:50:35 +03:00
Garux c3041cc2f8 using winding_t = std::vector<Vector3> 2021-07-31 18:28:38 +03:00
Garux ffa1a4340c std::vector<plane_t> mapplanes 2021-07-29 22:21:36 +03:00
Garux 89b7bcdf53 * read .map brush plane points and store brush planes for windings calculation in double precision (fixes cracks between brush faces) 2021-07-27 20:04:35 +03:00
Garux 6c00419653 fix spelling 2021-05-24 20:23:09 +03:00
Garux 5efe29d863 * use dynamic maxSurfaceVerts (user preference/game define) in 'force meta process for a surface' decision (was hardcoded) 2021-05-20 17:10:31 +03:00
Garux 75c7c09903 * replace model loaders by assimp library (40+ formats)
* auto split big model meshes to <= maxSurfaceVerts chunks (avoids excess meta process for vertexlit ones)
2021-05-07 14:47:39 +03:00
Garux 2222100316 indent classes, align by spaces 2021-03-24 00:25:15 +03:00
Garux 1d4424f4c6 minor tweaks 2021-03-12 01:17:01 +03:00
Garux 09c78ec0dc return Vector3 from vectorForKey() 2021-03-11 20:16:52 +03:00
Garux 1144be0881 add BasicVector3 uniform constructor 2021-03-11 19:14:07 +03:00
Garux 98f9023cdc minor tweaks 2021-03-11 10:57:17 +03:00
Garux 858ec974f7 * -saturation light switch, default = 1, affects lightmaps and vertex color; > 1 = saturate, 0 = grayscale, < 0 = complementary colors 2021-03-08 13:34:58 +03:00
Garux ac1dd904f1 * print available games on wrong -game and -format args 2021-03-08 13:32:16 +03:00
Garux 293fab0ffb manage color-to-byte conversions 2021-03-05 13:37:56 +03:00
Garux 39f5a2d060 use MinMax functions instead of raw math 2021-03-03 07:01:28 +03:00
Garux 9857bb955b more c++ math 2021-02-26 01:10:51 +03:00
Garux 4ce944444d rewrite q3map2 math in c++ 2021-02-25 19:41:43 +03:00
Garux 820dd5e21f bump MAX_IMAGES, MAX_MODELS 2021-02-10 00:20:32 +03:00
Garux 37c11990cb del struct StrBuf; CopiedString for mapShaderFile; 2021-02-09 13:03:48 +03:00
Garux b013f9954c simplify unlimited bsp entities code 2021-02-08 04:36:57 +03:00
Garux 92b2487875 fix string warnings 2021-02-08 01:33:36 +03:00
Garux ca34e8f38f enum class EFloodEntities 2021-02-07 07:34:57 +03:00
Garux 5fd7b340df * discard excess portals in the void (great optimization for maps with void areas in between of playable areas and non rectangular maps)
(excess portals there are effect of _blocksize)
	* optimize FloodPortals() (also fix stack depth crash in debug mode due to recursive calls)
	* fix xml_Select() of leaked entity (was selecting last map entity always)
	* xml_Select() leaked entity exactly in the beginning of leak line
2021-02-06 22:22:59 +03:00
Garux 2bf53ef643 fix overlook introduced in 36b63e1d2c 2021-01-30 16:50:40 +03:00
Garux 99a5ef0416 refactor entity key values routines 2021-01-30 16:23:31 +03:00
Garux 8425ce3c3e refactor foliage_t 2021-01-29 22:40:09 +03:00
Garux 762699287e refactor surfaceModel_t 2021-01-29 21:11:56 +03:00
Garux 276d1f5875 safe string in indexMap_t 2021-01-29 20:46:06 +03:00
Garux e11aede11a refactor surfaceType_t enum 2021-01-27 19:43:53 +03:00
Garux 1efff8cdfe refactor enum vstatus_t 2021-01-27 11:53:32 +03:00
Garux 62a0ae5623 prevent string overflows 2021-01-26 22:31:19 +03:00
Garux bdfd864670 refactor enums
credits for class BitFlags go to Jelvan <3
2021-01-25 01:33:56 +03:00
Garux 20b908e31b remove excess typedef struct declarations 2021-01-23 19:26:50 +03:00
Garux 54c38610bf use std::list<epair_t> 2021-01-23 17:25:47 +03:00
Garux 36b63e1d2c turn entities array to std::vector<entity_t> 2021-01-23 15:39:42 +03:00
Garux b0e62198ba use safe strings more 2021-01-21 18:41:16 +03:00
Garux 0ab896b84a remove MAC_STATIC hack 2021-01-21 16:17:23 +03:00
Garux f3c26c791f use safe strings more 2021-01-21 16:08:53 +03:00
Garux 15e4b8e850 manage model shaders remapping 2021-01-21 07:19:15 +03:00
Garux fe5c0879b4 remove -tmpin & -tmpout switches, as at best they were prepending tmp/ to absolute path 2021-01-20 12:48:10 +03:00
Garux 3b39a5754d prevent filename overflow in model .skin loader
strip model extension during filename construction
add variadic template operator to StringOutputStream for inline strings creation
2021-01-20 11:59:16 +03:00
Garux cfa502df6e safe string for globalCelShader 2021-01-19 22:40:58 +03:00
Garux c3437b7833 use safe strings in shaderInfo_s
turn ImageLoad() to expect extensionless path as input
2021-01-19 18:58:18 +03:00
Garux 9590d602d3 use String64 for shaderInfo_s::skyParmsImageBase
add variadic template operator to StringFixedSize for inline strings creation
2021-01-19 17:21:54 +03:00
Garux da3b05728c use safe string for shaderInfo_t.shader 2021-01-19 01:24:21 +03:00
Garux 13524d59ef fix the build 2021-01-16 15:10:59 +03:00
Garux ae9fe08159 * support -extlmhacksize N N input for non square lightmaps, for example -extlmhacksize 2048 1024
also enables this for -lightmapsize, legitimacy is questionable here
2020-06-14 15:49:16 +03:00
Garux c956102065 support variable number of key names in entity key value reading functions 2020-02-12 23:21:15 +03:00
Garux 433b9e776b manage entity key value reading routines 2020-02-07 15:49:29 +03:00
Garux 3409de2cb0 change EPAIR_STRCMP semantics 2020-02-04 03:50:33 +03:00
Garux eb70faddc8 use standard C bool type:
get rid of qfalse, qtrue aliases everywhere
replace qboolean in q3map2, q3data
redefine qboolean type in q2 tools, mbspc
2020-02-03 01:15:30 +03:00
Garux 25d94dbd2f add and use path_set_extension()
fix -bsp crash with .bsp sent as map path
	* fix: qer_editorimage, q3map_lightImage etc work with file names, containing period
(i.e. 'file.name.ext' names; don't StripExtension() twice in ImageLoad() for that)
2020-01-27 01:22:10 +03:00
Garux ad05e553b9 use realloc() instead of safe_malloc() + free()
add AUTOEXPAND_BY_REALLOC_ADD macro, use it
2020-01-23 05:01:44 +03:00
Garux 4d9a6cc2a9 const pointer in copy functions 2020-01-13 04:31:05 +03:00
Garux 5dc0244ef9 remove unused statistic variables 2020-01-13 00:39:55 +03:00
Thomas Köppe 23a166a4dd Change winding_t, winding_accu_t and brush_t to use flexible array members rather than fixed-sized arrays.
The arrays were always meant to be variably sized, and objects are only ever allocated dynamically. Object size computations are simplified with this change.

Flexible arrays were introduced in C99, so this change means that we will require a C99-conforming compiler henceforth.
2020-01-12 01:32:43 +03:00
Thomas Köppe 1e2ccf5f06 Use standard "offsetof" facility rather than manual code involving null pointer dereferences. 2020-01-12 00:49:05 +03:00
Garux 5d46d88d2d refactor autopk3.c
generalize Q_stricmp, Q_strncasecmp defines instead of local implementations
replace Q_strncpyz, Q_strcat, Q_strncat with strlcpy, strlcat versions: strcpyQ, strcatQ, strncatQ
fix ExtractFilePath, ExtractFileBase, ExtractFileExtension edge case (empty path string)
ExtractFileBase() : mimic StripExtension() logic
BeginMapShaderFile() : use 	ExtractFileBase(), 	ExtractFilePath()
2019-12-27 06:01:28 +03:00
Garux 853633efd1 move main.c::FixAAS()->convert_bsp.c 2019-12-20 17:39:04 +03:00
Thomas Debesse 68f8cabf95 split bsp conversion stuff from q3map2 2019-12-20 08:02:06 +03:00
Thomas Debesse 27b1549a2d split minimap stuff from q3map2 2019-12-20 06:57:02 +03:00
Garux 6a5d148284 q3map2 * -fillpink in light stage: fill unoccupied pixels with pink colour 2019-11-11 04:13:13 +03:00
Garux f2f36df58f q3map2 * _maxlight worldspawn key (works unless exposure is used) (for those, who know, what they do) 2019-07-25 19:55:16 +03:00
Garux 812a8b6001 q3map2: follow ODR
enables compilation with -fno-common
2019-02-23 00:09:42 +03:00
Garux 43a5b5513f fix indentation and typos 2019-01-27 21:37:37 +03:00
Garux 7884d9f1cd q3map2 * assign surfaceflags to brush 'bevel' planes, so physics like slick/nodamage/metalsteps function at brush edges and vertices
non bitwise materials in certain games are not handled
2019-01-27 19:41:16 +03:00
Garux a2406ea3d7 q3map2: * Valve220 mapformat autodetection and support 2017-10-17 12:59:56 +03:00
Garux 0261afc6df Q3map2:
* -backsplash (float)scale (float)distance: scale area lights backsplash fraction + set distance globally
		(distance < -900 to omit distance setting); def = 1 23; real area lights have no backsplash (scale = 0)
		q3map_backsplash shader keyword overrides this setting

Radiant:

binds...
	* alt + m1 click/drag in component modes: select objects
misc...
	* fix: selected entity and brush numbers display in 'Find brush' dialog
	* prefer to display texture width and height in status bar over name (PANGO_ELLIPSIZE_START)
	* allow search shortcut (ctr+f in win) in entity inspector -> entity class list
	* fix: don't save empty group entities (but worldspawn)
2017-08-02 09:19:22 +03:00
Garux 93ca259313 Q3map2:
* new slightly less careful, but much faster lightmaps packing algorithm (allocating... process)
	* -slowallocate switch to enable old lightmaps packing algorithm
	* Subsampling...collapsing...sorting...allocating...storing...projecting... timers
2017-08-02 09:16:57 +03:00
Garux ed4c8c2044 Q3map2:
* new area lights backsplash algorithm ( by Jelvan ), hijacking temp area lights ( to simulate volumetric behavior of source ones )
	* fix: create backsplash for area lights, while q3map_lightsubdivide'ing too
	* no backsplash for area lights, if surf == sky
	* report patches count in -info
	* -exportents to exports entities to a .ent file
	* unvanquished game support
	* -fs_basepath: can be used more than once to look in multiple paths (Sets the given path as main directory of the game)
	* -fs_game: can be used more than once (Sets a different game directory name (default for Q3A: baseq3))
	* -fs_pakpath <dir>: Specify additional custom path to assets (can be used more than once to look in multiple paths)
	* fix undocumented unexpected LokiInitPaths
	* -help option (-h, --help)
2017-08-02 09:16:24 +03:00
Garux e7c45da823 Q3map2:
* code fixes
	* packer: !FAIL! msg for missing ingame resources, ~fail for the rest
	* bumped stack size to 4Mb to fix crash for huge skies, using old shaders with fairly useless q3map_surfacelight + q3map_lightsubdivide < 999 combo


Radiant:

binds...
	* F5: run first in the list or recently invoked build option
	* F11: fullscreen

misc...
	* opening *.map, sent via cmd line: enabled for non win32 too
	* fix: textures find/replace wnd better default pos, size
	* fix: crash in CSG::Subtract
	* fix crash: main wnd maximized + 'start on primary monitor' off + monitors > 1
	* correct save/restore of main wnd pos/size and maximized/fullscreened states
	* scale widgets consistently along with main wnd, while using regular layout
2017-08-02 09:06:17 +03:00
Garux f8b2b1f25e Q3map2:
* decompiling: fix: broken brushes, empty brush definitions; shut down too usual warnings; with -force tries to decompile model autoclip too
	* decompiling: -fast mode for BSPToMap conversion


Radiant:
misc...
	* _setmaxstdio(2048): tested max pk3s count: 1021
	* curve: deform (randomize Z points coord at given amount)
2017-08-01 13:59:31 +03:00
Garux fe73dd74d0 Q3map2:
* fix: number of problems, found by Visual Studio's static code analyser
		(76ea7385dd)

Radiant:

misc...
	* fix of: convert group entity to diff one = entity w/o objects
	* asking for game path at 1st start, even if one, specified in .game exists (auto picking could make confused)
	* disabled game autodetecting: (~2min awaiting on w7 in non admin mode was confusing)
2017-08-01 13:58:52 +03:00
Garux 0fb65a91c7 Q3map2:
* -brightness 0..alot, def 1: mimics q3map_lightmapBrightness, but globally + affects vertexlight
	* -contrast -255..255, def 0: lighting contrast
	* packer improvements

Radiant:

binds...
	* entity inspector: Tab enters Key field, toggles between key/value fields; Del deletes keys; Esc quits

misc...
	* improved mwheel 2d zoom by Neumond
	* +makeRoom: like hollow, but extrudes faces outwards; for making rooms
	* deactivating tex dirs tree after loading dir, so SPACE and ENTER aren't broken for 2D after that
	* Regular, RegularLeft layouts: smaller console, bigger tex browser
	* Rotate, Scale dialogs: values aren't erased on Enter, OK, Apply (are on cancel, esc)
	* Rotate dialog: fix: new value in focused field wasn't taking in account on Enter
	* +updating texture directories list on 'flush and reload shaders' (reloading shaderlist aswell)
	* NumLock perspective window fix
	* ctrl+k(ConnectEntities): friendlier to complex connections, takes in account existing keys
		(priority: target > targetname > none)
	* +'all Supported formats' default option in open dialogs
	* defaulted show light radii
	* camera fov: 90->110
	* cubic clip: off by default; bigger def dist; fixed button's shortcut tip
	* prefs: Min & Max texture thumbnail size + dependant on scale;
		def = *scale .5, min 48, max 160 (makes range 96-320 visually differentiated)
2017-08-01 13:57:26 +03:00
Garux 7d7436ec3d Q3map2:
* packer: +warnings on implicitMaps, mapNoComps
	* packer: known problem: minizip crash, when trying to get file with 2039 year date from disk
	* -repack: repacks multiple maps, strips out only required shaders; main argument is single bsp path or txt with full pathes to bsps
		switches: -dbg: talkative mode; -png: include pngs, at highest priority; -complevel: -1..10, def 0, compression level
		uses additional exclusions file repack.exclude with different logic
2017-08-01 13:56:25 +03:00
Garux eef3995202 Q3map2:
* -pk3: autopackager mode(complete Q3 support); bsp path as input; switches: -dbg - talkative mode, -png - include pngs, at highest priority
		is using file 'gamename.exclude' to exclude vanilla game resources
		tip: ioq3, netradiant, compiler (and packager) treat *.pk3dir directories as separate pk3 files
2017-08-01 13:51:52 +03:00
Garux af4e2d29cf Q3map2:
* shot down spammy warning about samplesize for lmsize<=128; -debugsamplesize to show
	* numBspModels ('brusmodels') stat emitting


Radiant:

misc...
	* filters toolbar (disableable)
	* fix: shift + m1 click in tex browser to open shader in internal/external editor;
		defaulted internal; focuses on wanted shader; correct opening/saving
	* fix: angles "0 x 0" autoconvert to angle "x" on transform (was getting deleted w/o a trace)
2017-08-01 13:50:06 +03:00
Garux f73cc19a61 Q3map2:
* -clipdepth F, def 2, _clipdepth
	* fixed model autoclip (64u thick brushes/no collision at all in some cases)
	* pyramidal etc zillion (20!) of autoclip modes
	* removed stuctural caulk in models, was broken anyway

Radiant:

misc...
	* hollow: produces not intersecting brushes
2017-08-01 13:34:48 +03:00
Garux bf803dd851 Q3map2:
* -bounceColorRatio 0..1 (ratio of colorizing sample by texture)
	* -debugclip: autoclip debug, uses shaders debugclip, debugclip2
	* >2GB makefile option, allows up to 3GB ram on 32bit, 4GB on 64bit
	* speedup patch to use fast sqrt at some points of light phase, where precision is not needed

Radiant:

binds...
	* paste to camera - shift+v (alt+v was leading to texBro-View menu)
2017-08-01 13:33:37 +03:00
Garux 7ca7a54fe6 Q3map2:
fix * q3map_remapshader remaps anything fine, on all stages (effect is: postrenaming shader when things are have been done)
	* typo at -dirtmode

Radiant:

misc...
	* translucent textures are visible, while selected, too; +matching trans polys are visible simultaneously
2017-08-01 13:32:31 +03:00