Commit graph

3903 commits

Author SHA1 Message Date
Kp f84de25e6b Expand kmatrix_draw_coop_item inline
kmatrix_draw_coop_item computes various values that are always the same
for every iteration of the calling loop.  Expand it inline in its one
caller so that the caller can cache those values.
2016-10-15 00:53:14 +00:00
Kp 8327d85c76 Remove unused get_multi_endlevel_poll1
The only caller for get_multi_endlevel_poll1 was DoEndLevelScoreGlitz,
which only called it on an unreachable path.  That path is now gone, so
remove get_multi_endlevel_poll1.
2016-10-15 00:53:14 +00:00
Kp e4e1799b57 Propagate DoEndLevelScoreGlitz argument network
All callers pass 0.  Remove the argument and update the logic that
tested it.
2016-10-15 00:53:14 +00:00
Kp fa620d5011 Make DoEndLevelScoreGlitz static 2016-10-15 00:53:14 +00:00
Kp 1d563a9e03 Fix memory corruption during tracker initialization
Commit 63ca866 reduced the number of elements in UDP_Socket[] from (2 +
tracker) to (2), but added a write to UDP_Socket[2], which is now out of
bounds.  Fortunately, UDP_Socket[2] is never read.  Remove the
initialization of it.

Fixes: 63ca86698e ("Added communication for tracker written by A Future Pilot")
2016-10-15 00:53:14 +00:00
Kp deeb7def6e Reuse zeroed *_rw structure during save 2016-10-13 03:14:11 +00:00
Kp 7a18f60a94 Replace nd_read_short casts with an overload for uint16_t
Casting the type of the input overrides useful compiler checks.  Remove
all such casts and add an overload for uint16_t.
2016-10-12 02:16:29 +00:00
Kp 675fff5fec Replace nd_read_byte casts with an overload for uint8_t
Casting the type of the input overrides useful compiler checks.  Remove
all such casts and add an overload for uint8_t.
2016-10-12 02:16:29 +00:00
zico 63ca86698e Added communication for tracker written by A Future Pilot 2016-10-10 18:19:56 +02:00
zico 407805be42 Restored proper scaling of Min_trackable_dot by adding new function get_scaled_min_trackable_dot(). This was previously a fixed defintion based on Descent 1's result of Min_trackable_dot's scaling if FrameTime < F1_0/16 which did not properly reflect the intended result of Descent 2 nor did it properly align to different FrameTime/HOMING_TURN_RATE settings. get_scaled_min_trackable_dot() will scale the result accordingly for whatever fixed or variable time setting is given and respecting each game's individual scaling. 2016-10-10 15:37:25 +02:00
zico 9cab9e58c6 Fixed regression from e0785251c4 making the homing indicator go haywire if built without NEWHOMER defined 2016-10-10 14:23:45 +02:00
Chris Taylor bc1c9ebd97 Merge branch 'unification/master' into allow_dialog_subclass
Conflicts:
	common/arch/sdl/window.cpp - Remove unused EVENT_WINDOW_CLOSED and w_callback local var
	common/ui/dialog.cpp - Remove unused EVENT_WINDOW_CLOSED
2016-10-10 14:40:11 +08:00
Kp 1af65071d7 Remove unused EVENT_WINDOW_CLOSED
Every callee that recognized EVENT_WINDOW_CLOSED did so only to
explicitly ignore it.  Remove the code to send it and all sites that
ignored it.
2016-10-10 00:25:15 +00:00
Kp b02375bfbd Rename WORDS_NEED_ALIGNMENT to DXX_WORDS_NEED_ALIGNMENT
Rename symbol WORDS_NEED_ALIGNMENT to DXX_WORDS_NEED_ALIGNMENT to show that it is a DXX
symbol, not one inherited from a library.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -wl WORDS_NEED_ALIGNMENT -- '*.h' '*.cpp' | xargs sed -i -e 's/^\s*#ifdef \(WORDS_NEED_ALIGNMENT\)\>/#if DXX_\1/' -e 's/\s*#\(el\)\?if \(.*\)defined(\(WORDS_NEED_ALIGNMENT\))/#\1if \2DXX_\3/' -e 's/^\s*#ifndef \(WORDS_NEED_ALIGNMENT\)\>/#if !DXX_\1/'
2016-10-09 17:35:03 +00:00
Kp 3cc73ee69d Fix similar/3d/interp.cpp useless+old-style casts in DXX_WORDS_BIGENDIAN path 2016-10-09 17:35:02 +00:00
Kp 8ebe98df6b Fix test for DXX_USE_UDP, DXX_USE_TRACKER
Fixes: 435aa5a020 ("Move USE_UDP to dxxsconf.h; rename to DXX_USE_UDP")
Fixes: 7c8c2b5aa4 ("Move USE_TRACKER to dxxsconf.h; rename to DXX_USE_TRACKER")
2016-10-08 23:24:22 +00:00
Kp 2d8928958d Fix some use_udp=0 build breaks
The build is still broken for use_udp=0.
2016-10-08 23:24:22 +00:00
Kp 65de22e4be Replace Int3 with con_printf(CON_URGENT) when loading bogus trigger 2016-10-08 23:24:22 +00:00
Kp af09257e2d Blank out most of object_rw when saving OBJ_NONE objects 2016-10-08 23:24:21 +00:00
Kp 5114b8f8b6 Fix object corruption loading save game
Saved games dump robot ai_local state for all objects, regardless of
whether the object is a robot.  Loading a game restored all ai_local
values, regardless of whether the object was a robot on restore.  This
caused memory corruption in objects that were not robots when the
`ctype.`_T_ for that object was large enough to overlap
`ctype.ai_info.ail`.

Fix this by loading the ai_local into a junk buffer when the object is
not a robot.  It would be better to skip over the bogus ai_local
entirely, but the structure of ai_local_read_swap makes that difficult.
Use the easy fix for now.
2016-10-08 23:24:21 +00:00
Kp 03dbc96103 Switch DXX_HAVE_POISON to 0/1 instead of undef/defined 2016-10-08 23:24:21 +00:00
Kp 1d09ca32ad Remove spurious 'u' after DXX_PRI_size_type uses 2016-10-08 18:02:34 +00:00
Kp d6f48dbd91 Prevent crash when level specifies invalid wall number
Kreator reports that "Pyramids of Luxoran" crashes due to a valptridx
sanity check.  The level incorrectly attempts to open a wall on a
segment/side which has no wall.

Add an error check and a con_printf suggesting that the level author
needs to fix the invalid trigger.
2016-10-08 18:02:34 +00:00
Kp 31d2b5cfb2 Use correct get_*_id function for collide_robot_and_weapon 2016-10-07 02:08:56 +00:00
Kp 635b3f54e3 Downgrade matcen diagnostic from exception to con_printf(CON_URGENT)
Kreator reports that a level from back when Descent was new fails the
test for bogus matcen triggers.  This level cannot be played when that
test throws an exception, so downgrade the exception to a CON_URGENT
message.  This will hopefully deter level authors from creating any new
levels with this problem, but will allow users to play existing levels.
2016-10-06 02:08:07 +00:00
Chris Taylor db665d8c33 Allow dcx::UI_DIALOG struct to be subclassed - step 2
Allow dcx::UI_DIALOG struct to be subclassed step 2. Make all the UI_DIALOG handlers return a window_event_result like everyone else.
2016-10-04 15:58:20 +08:00
Chris Taylor 60ac1eaad3 Replace delete dcx::window kludge with a better solution
Replace delete dcx::window kludge with a better solution: instead of requiring every handler to delete the window, add a window_event_result::deleted, which gets returned if the window was deleted by the handler, so window_close knows not to attempt to delete it again.
2016-10-04 14:05:44 +08:00
Chris Taylor d4b85de49b Remove redundant checks for nullptr before deleting dcx::window instances in response to feedback. 2016-10-03 11:21:11 +08:00
kreatordxx b87fcad332 Merge pull request #230 from dxx-rebirth/allow_window_subclasses_2
Allow window subclasses
2016-10-03 10:36:26 +08:00
Kp ec19a6947f Move more symbols to namespace dsx 2016-10-02 19:35:34 +00:00
Kp 53bec35f34 Use range_for for player_ship_read 2016-10-02 19:35:34 +00:00
Kp 3024bb8bbe Pass object_base &to create_player_appearance_effect 2016-10-02 19:35:34 +00:00
Kp a468e2612b Factor out gr_set_attributes SDL_GL_SetAttribute calls 2016-10-02 19:35:34 +00:00
Kp 0abb7278da Move FPSIndicator to CCfg 2016-10-02 19:35:33 +00:00
Kp 797554f80a Move Multisample to CCfg 2016-10-02 19:35:33 +00:00
Chris Taylor 87617e8ac9 Allow dcx::window struct to be subclassed - step 3
Allow dcx::window struct to be subclassed step 3. This step adds the window destructor and both requires and implements the window to be deleted by the event handler/client in all cases.
2016-10-02 17:49:19 +08:00
Kp 968746c0e8 Pass secondary_weapon_index_t to player_has_secondary_weapon 2016-10-02 00:34:49 +00:00
Kp 603159ec4b Pass secondary_weapon_index_t to do_secondary_weapon_select 2016-10-02 00:34:49 +00:00
Kp b8f58309f0 Reuse computed filename for screenshot 2016-10-02 00:34:49 +00:00
Kp 2289ed473d Unify computing write_bmp output size requirement 2016-10-02 00:34:49 +00:00
Kp b2f744f1f8 Remove unnecessary diminish_palette in pcx_write_bitmap
The variable is never read after that diminish_palette call, whether in
pcx_write_bitmap or in its sole caller.
2016-10-02 00:34:49 +00:00
Kp e11ac102a6 Cache bitmap properties in pcx_write_bitmap 2016-10-02 00:34:49 +00:00
Kp 815a26f32d Expand and cache various uses of get_local_plrobj() 2016-10-02 00:34:48 +00:00
Kp 6c7e64d871 Fold ai_do_actual_firing_stuff calls to ready_to_fire_weapon1 2016-10-02 00:34:48 +00:00
Kp 95988a343c Pass player object to recompute_automap_segment_visibility 2016-10-02 00:34:48 +00:00
Kp 0d5d191671 Pass player object to DropMarker 2016-10-02 00:34:48 +00:00
Kp 67e10d532b Pass player powerup_flags to init_ai_frame 2016-10-02 00:34:48 +00:00
Kp 13f751364d Pass player powerup_flags to make_nearby_robot_snipe 2016-10-02 00:34:48 +00:00
Kp dc7c718b66 Pass player powerup_flags to create_bfs_list 2016-10-02 00:34:47 +00:00
Kp 1dcacefc9c Pass player object to check_trigger 2016-10-02 00:34:47 +00:00
Kp 171e303adb Pass player object to check_trigger_sub 2016-10-02 00:34:47 +00:00
Kp 84e596e1b4 Pass player_info to player_has_powerup 2016-10-02 00:34:47 +00:00
Kp 69b84e418d Pass player_info to pick_up_energy 2016-10-02 00:34:47 +00:00
Kp 0b01bad915 Pass player_info to pick_up_primary_or_energy 2016-10-02 00:34:47 +00:00
Kp 038a6e3261 Pass player powerup_flags to wall_hit_process 2016-10-02 00:34:46 +00:00
Kp 3f27b6daac Pass player_info to CyclePrimary 2016-10-02 00:34:46 +00:00
Kp 2c37514235 Pass player_info to CycleSecondary 2016-10-02 00:34:46 +00:00
Kp 36213d9b50 Pass player_info to select_secondary_weapon 2016-10-02 00:34:46 +00:00
Kp e3c3e39045 Pass player_info to do_primary_weapon_select 2016-10-02 00:34:46 +00:00
Kp fe1cd6a165 Pass player_info to maybe_autoselect_primary_weapon 2016-10-02 00:34:46 +00:00
Kp 8219df8db9 Pass player_info to pick_up_secondary 2016-10-02 00:34:45 +00:00
Kp c94cec40d0 Pass player_info to pick_up_primary 2016-10-02 00:34:45 +00:00
Kp 2bd5b80451 Pass player_info to check_to_use_primary_super_laser 2016-10-02 00:34:45 +00:00
Kp 86a4942883 Pass player_info to do_secondary_weapon_select 2016-10-02 00:34:45 +00:00
Kp 888415f086 Pass player_info to reject_unusable_secondary_weapon_select 2016-10-02 00:34:45 +00:00
Kp dfc2584c39 Pass player_info to reject_unusable_primary_weapon_select 2016-10-02 00:34:45 +00:00
Kp 9800f856e7 Pass player_info to select_primary_weapon 2016-10-02 00:34:45 +00:00
Kp 11551abe5c Pass player_info to non-static pick_up_vulcan_ammo 2016-10-02 00:34:44 +00:00
Kp 44579c7dc8 Pass player_info to static pick_up_vulcan_ammo 2016-10-02 00:34:44 +00:00
Kp 96651095e3 Pass player_info to DropCurrentWeapon, DropSecondaryWeapon 2016-10-02 00:34:44 +00:00
Kp b78474edc6 Pass player_info to player_has_secondary_weapon 2016-10-02 00:34:44 +00:00
Kp ad3a29a7eb Pass player_info to cycle_primary_state 2016-10-02 00:34:44 +00:00
Kp 83dd51d79b Pass player_info to player_has_primary_weapon 2016-10-02 00:34:43 +00:00
Kp c483deb646 Change Parallax negative energy hack to avoid modifying energy
This will allow players to see when their energy goes negative, which
might prompt someone to report it with steps to reproduce.
2016-10-02 00:34:43 +00:00
Kp ab89513454 Pass player_info to auto_select_primary_weapon 2016-10-02 00:34:43 +00:00
Kp 1be7344d56 Pass player_info to auto_select_secondary_weapon 2016-10-02 00:34:43 +00:00
Kp 00ccd3f6f6 Move Delayed_secondary into Secondary_weapon 2016-10-02 00:34:43 +00:00
Kp e6b44ffef1 Pass player_info to delayed_autoselect 2016-10-02 00:34:43 +00:00
Kp f148eee01a Pass player powerup_flags to PLAYER_MAX_AMMO 2016-10-02 00:34:42 +00:00
Kp 04eeda8486 Pass local player to skip_create_egg_powerup 2016-10-02 00:34:42 +00:00
Kp e9eaf53c8a Pass player powerup_flags to ai_door_is_openable 2016-10-02 00:34:42 +00:00
Kp 89cec10270 Pass player powerup_flags to compute_vis_and_vec 2016-10-02 00:34:42 +00:00
Kp 5e30489943 Pass player powerup_flags to do_firing_stuff 2016-10-02 00:34:42 +00:00
Kp cae992db5b Factor out move_around_player multiplications 2016-10-02 00:34:42 +00:00
Kp c029d47825 Pass player powerup_flags to move_around_player 2016-10-02 00:34:41 +00:00
Kp bb65d3ce97 Pass player powerup_flags to ai_fire_laser_at_player 2016-10-02 00:34:41 +00:00
Kp 8cfa1508b6 Pass player powerup_flags to escort_set_goal_object 2016-10-02 00:34:41 +00:00
Kp 147af3d4f5 Use array<> for pick_connected_segment arrays 2016-10-02 00:34:41 +00:00
Kp e6e00debba Pass only segidx to pick_connected_segment
A full object is not necessary.
2016-10-02 00:34:41 +00:00
Kp a62cc369ab Expand get_local_player_shields
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-10-02 00:34:40 +00:00
Kp fe99fe232b Expand get_local_player_vulcan_ammo
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-10-02 00:34:40 +00:00
Kp ce65735c04 Expand get_local_player_flags
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-10-02 00:34:40 +00:00
Kp 1b321ac0c6 Expand get_local_player_secondary_ammo
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-10-02 00:34:40 +00:00
Kp b422db5500 Expand get_local_player_cloak_time
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-10-02 00:34:39 +00:00
Kp 194d258e59 Condense buddy key check 2016-10-02 00:34:39 +00:00
Kp f3865db4cb Use implicit range of vtrgptr 2016-10-02 00:34:39 +00:00
Kp 1ab55f7551 Cast maybe_select_weapon_by_type input to weapon enum
All callers provide a value which must be a valid weapon number.  Cast
the result to a weapon enum so that called helpers can be converted to
expect an enum.
2016-10-02 00:34:39 +00:00
Kp 437d1717d8 Combine automap add_one_edge flags 2016-09-30 01:49:57 +00:00
Kp cd4e5441ba Rename WORDS_BIGENDIAN to DXX_WORDS_BIGENDIAN
Rename symbol WORDS_BIGENDIAN to DXX_WORDS_BIGENDIAN to show that it is a DXX
symbol, not one inherited from a library.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -wl WORDS_BIGENDIAN -- '*.h' '*.cpp' | xargs sed -i -e 's/^\s*#ifdef \(WORDS_BIGENDIAN\)\>/#if DXX_\1/' -e 's/\s*#\(el\)\?if \(.*\)defined(\(WORDS_BIGENDIAN\))/#\1if \2DXX_\3/' -e 's/^\s*#ifndef \(WORDS_BIGENDIAN\)\>/#if !DXX_\1/'
2016-09-30 01:49:57 +00:00
Kp 6efd304118 Merge branch 'button_pointers' into master 2016-09-28 02:09:25 +00:00
Kp 8d25cf4162 Define newmenu_item::*_specific_type::nm_type
The *_specific_type structures have a static member `nm_type`.  In -O0
builds, an out-of-line definition of this member is required, but was
not present.  In -O2 builds, the optimizer happened to remove all
references to the out-of-line definition, so the link succeeded despite
not having a definition.  Add that definition.
2016-09-28 01:56:12 +00:00
Chris Taylor dd1a6cc7b9 Save more unique_ptr's to UI_GADGET_BUTTON's
Save unique_ptr's to UI_GADGET_BUTTON's in similar/editor/med.cpp and similar/editor/medwall.cpp. Fixes compile errors and resolves a crash when attempting to access both dialogs' gadgets (input event processing is the first attempt).
2016-09-27 15:11:50 +08:00
Kp 10f4f87a36 Fix _g3_draw_poly declaration/definition inconsistency
_g3_draw_poly uses type cg3s_point which is const in OGL and non-const
in SDL.  gcc-6 with LTO reports a One Definition Rule violation for this
mismatch:

    typedef const int cint;
    void f(cint *);
    void f(const int *) {}

The code ran correctly as it was, but the fix is trivial and has no
effect on the generated code, so fix it to satisfy the compiler.
2016-09-26 00:50:09 +00:00
Kp 56e4f6b6f7 Factor out set_color_by_model_light color
Optimizing compilers tend to factor out color automatically.  Move it up
to the caller to ensure that it is computed once even if the compiler
does not optimize aggressively.
2016-09-26 00:50:09 +00:00
Kp cc2fd7071d Fold endlevel_render_mine g3_set_view_matrix call 2016-09-26 00:50:09 +00:00
Kp d0c3f03d54 Remove unnecessary nullptr test on nonnull parameter in select_file_recursive2
gcc-6 warns about this test because the caller is not permitted to pass
nullptr here, so the test is unnecessary.
2016-09-26 00:50:09 +00:00
Kp ef6f803200 Remove unnecessary nullptr test on nonnull parameter
gcc-6 warns about this test because the caller is not permitted to pass
nullptr here, so the test is unnecessary.
2016-09-26 00:50:09 +00:00
Kp bf7995ade2 Fold render call to g3_set_view_matrix
Remove support for JOHN_ZOOM.  It was present in the initial release,
but never activated.
2016-09-26 00:50:08 +00:00
Kp 4894117d70 Rename MAX_HATS_PER_JOYSTICK to DXX_MAX_HATS_PER_JOYSTICK
Rename symbol MAX_HATS_PER_JOYSTICK to DXX_MAX_HATS_PER_JOYSTICK
to show that it is a DXX symbol, not one inherited from a library.

git grep -lzw MAX_HATS_PER_JOYSTICK -- SConstruct '*.h' '*.cpp' | xargs -0 sed -i -e 's/\<MAX_HATS_PER_JOYSTICK\>/DXX_&/g'
2016-09-25 04:52:49 +00:00
Kp 94937de128 Rename MAX_BUTTONS_PER_JOYSTICK to DXX_MAX_BUTTONS_PER_JOYSTICK
Rename symbol MAX_BUTTONS_PER_JOYSTICK to DXX_MAX_BUTTONS_PER_JOYSTICK
to show that it is a DXX symbol, not one inherited from a library.

git grep -lzw MAX_BUTTONS_PER_JOYSTICK -- SConstruct '*.h' '*.cpp' | xargs -0 sed -i -e 's/\<MAX_BUTTONS_PER_JOYSTICK\>/DXX_&/g'
2016-09-25 04:52:49 +00:00
Kp 7d38a9f0be Rename MAX_AXES_PER_JOYSTICK to DXX_MAX_AXES_PER_JOYSTICK
Rename symbol MAX_AXES_PER_JOYSTICK to DXX_MAX_AXES_PER_JOYSTICK to show
that it is a DXX symbol, not one inherited from a library.

git grep -lzw MAX_AXES_PER_JOYSTICK -- SConstruct '*.h' '*.cpp' | xargs -0 sed -i -e 's/\<MAX_AXES_PER_JOYSTICK\>/DXX_&/g'
2016-09-25 04:52:49 +00:00
Kp f24e9f836c Rename MAX_JOYSTICKS to DXX_MAX_JOYSTICKS
Rename symbol MAX_JOYSTICKS to DXX_MAX_JOYSTICKS to show that it is a DXX
symbol, not one inherited from a library.

git grep -lzw MAX_JOYSTICKS -- SConstruct '*.h' '*.cpp' | xargs -0 sed -i -e 's/\<MAX_JOYSTICKS\>/DXX_&/g'
2016-09-25 04:52:48 +00:00
Kp 69eec0d71f Save some editor gadget pointers 2016-09-24 18:06:11 +00:00
Kp 62b58e9890 Move OGL to dxxsconf.h; rename to DXX_USE_OGL
Rename symbol OGL to DXX_USE_OGL to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -lzw OGL -- '*.h' '*.cpp' | xargs -0 sed -i -e 's/\(\s*#\s*if\)def\s*OGL/\1 DXX_USE_OGL/' -e 's/\(\s*#\s*if\)ndef OGL/\1 !DXX_USE_OGL/' -e 's/\(\s*#\s*if !\?\)defined(OGL)/\1DXX_USE_OGL/'
2016-09-24 18:06:11 +00:00
Kp 3544ea097d Move OGLES to dxxsconf.h; rename to DXX_USE_OGLES
Rename symbol OGLES to DXX_USE_OGLES to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -lzw OGLES -- '*.h' '*.cpp' | xargs -0 sed -i -e 's/\(\s*#\s*if\)def\s*OGLES/\1 DXX_USE_OGLES/' -e 's/\(\s*#\s*if\)ndef OGLES/\1 !DXX_USE_OGLES/'
2016-09-24 18:06:11 +00:00
Kp 7a13d3f228 Include dxxsconf.h explicitly and earlier 2016-09-24 18:06:10 +00:00
zico 1e6a5ec528 Addition for 6c6a32ba92, allowing edge padding for overlaying level textures, disabling it for base textures. This isn't needed and improves visual appearence of base textures with transparency (fuelcenters, forcefields, grates, etc) when texture filtering is enabled. 2016-09-17 18:26:59 +02:00
zico 1f144f167c Addition for 6c6a32ba92, allowing edge padding for level and polymodel texturees only but disable it for sprites, fonts, hud images, etc. as those looked bad with this form of color bleeding in combination with various texture filtering mechanics. 2016-09-17 15:56:43 +02:00
Kp 8180fc34e8 Merge branch 'locale_header_directive' into unification/master
`std::use_facet` is provided by `<locale>`.  x86_64-pc-linux-gnu happens
to provide `std::use_facet` in inferno.cpp without explicitly including
`<locale>`.  kreator found that clang on OS X does not implicitly
provide `<locale>`.  `<locale>` must be included to make
`std::use_facet` available on OS X.  Although it worked without this on
Linux, it is the right thing to do everywhere.
2016-09-15 01:50:56 +00:00
Kp 0bff113335 Fix triangle rendering problem
Unlike many uses of index_sequence<N...>, this set of N... is not the
result of make_tree_index_sequence.  Some callers pass sequences with
`Nn != n` for some n, so vp is not initialized as a copy of all elements
of ovp in the same order as ovp.

Fixes: fa5475aa54 ("Remove unnecessary copy of vertex points")
2016-09-14 01:59:33 +00:00
kreatordxx b39cdac1fd Add include directive for <locale>
Add include directive for <locale>, fixing four compiler errors on Apple Clang.
2016-09-13 19:34:32 +08:00
Kp f11235147a Work around clang crash bug
clang crashes with a segmentation fault if asked to implicitly convert
1u to std::size_t in partial_range inline chain.  Add a conversion
outside the inline chain, which seems to avoid the bug.
2016-09-11 18:49:17 +00:00
Kp 72e9ed319c Rename VERSION to DXX_VERSION_STR
Rename symbol VERSION to DXX_VERSION_STR to show that it is a DXX
symbol, not one inherited from a library.
2016-09-11 18:49:16 +00:00
Kp 6a3ded191f Move EDITOR to dxxsconf.h; rename to DXX_USE_EDITOR
Rename symbol EDITOR to DXX_USE_EDITOR to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -wl EDITOR -- '*.h' '*.cpp' | xargs sed -i -e 's/^\s*#ifdef \(EDITOR\)\>/#if DXX_USE_\1/' -e 's/\s*#\(el\)\?if \(.*\)defined(\(EDITOR\))/#\1if \2DXX_USE_\3/' -e 's/^\s*#ifndef \(EDITOR\)\>/#if !DXX_USE_\1/'
2016-09-11 18:49:16 +00:00
Kp 0015b4282c Move IPv6 to dxxsconf.h; rename to DXX_USE_IPv6
Rename symbol IPv6 to DXX_USE_IPv6 to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -wl IPv6 -- '*.h' '*.cpp' | xargs sed -i -e 's/^\s*#ifdef \(IPv6\)$/#if DXX_USE_\1/' -e 's/\s*#\(el\)\?if \(.*\)defined(\(IPv6\))/#\1if \2DXX_USE_\3/'
2016-09-11 18:49:15 +00:00
Kp 435aa5a020 Move USE_UDP to dxxsconf.h; rename to DXX_USE_UDP
Rename symbol USE_UDP to DXX_USE_UDP to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -l USE_UDP -- '*.h' '*.cpp' | xargs sed -i -e 's/^\s*#ifdef \(USE_UDP\)$/#if DXX_\1/' -e 's/\s*#\(el\)\?if \(.*\)defined(\(USE_UDP\))/#\1if \2DXX_\3/'
2016-09-11 18:49:15 +00:00
Kp 7c8c2b5aa4 Move USE_TRACKER to dxxsconf.h; rename to DXX_USE_TRACKER
Rename symbol USE_TRACKER to DXX_USE_TRACKER to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct were
manual.

git grep -l USE_TRACKER -- '*.h' '*.cpp' | xargs sed -i -e 's/^#ifdef \(USE_TRACKER\)$/#if DXX_\1/' -e 's/#\(el\)\?if \(.*\)defined(\(USE_TRACKER\))/#\1if \2DXX_\3/'
2016-09-11 18:49:15 +00:00
Kp ddf888cd72 Move USE_SDLMIXER to dxxsconf.h; rename to DXX_USE_SDLMIXER
Rename symbol USE_SDLMIXER to DXX_USE_SDLMIXER to show that it is a DXX
symbol, not one inherited from a library.  Move it to dxxsconf.h to
shorten the command line.

This is a mostly automated transform, but the changes to SConstruct and
inferno.cpp were manual.

git grep -l USE_SDLMIXER -- '*.h' '*.cpp' | xargs sed -i -e 's/^#ifdef \(USE_SDLMIXER\)$/#if DXX_\1/' -e 's/#\(el\)\?if \(.*\)defined(\(USE_SDLMIXER\))/#\1if \2DXX_\3/'
2016-09-11 18:49:15 +00:00
Kp 0249358ccc Fold render_face flashing light tests 2016-09-11 18:49:15 +00:00
Kp 2952857461 Unify calculating green/blue when control_center_destroyed 2016-09-11 18:49:14 +00:00
Kp 4ed4ceece6 Cache references to array elements in render_face
Make the code easier to read by assuring the reader that each array
is always accessed at exactly one index per pass of the loop.
2016-09-11 18:49:14 +00:00
Kp 090852d6cd Defer initializing dyn_light in render_face
Cloaked faces do not require dyn_light.  Defer it to a later loop that
covers the same extents.
2016-09-11 18:49:14 +00:00
Kp 1f1be05d10 Simplify bm2 initialization in render_face 2016-09-11 18:49:14 +00:00
Kp fa5475aa54 Remove unnecessary copy of vertex points 2016-09-11 18:49:14 +00:00
Kp 8e3a07f99d Remove laser.cpp inclusion of unused header reverse.h 2016-09-11 18:49:14 +00:00
Kp 4864f533cf Pass object_base &to fly_init 2016-09-11 18:49:13 +00:00
Kp 198b068da6 Expand get_local_player_energy
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-09-11 18:49:13 +00:00
zico 8e097e79f0 Fixed byte offset in string for SDL_DISABLE_LOCK_KEYS, putting the 1 in place of the 0 instead on the terminator. 2016-09-05 11:31:22 +02:00
Kp 3fc1441b3f Remove unused Win32 OpenGL indirections 2016-09-04 19:10:43 +00:00
Kp 1e34dae94d Switch Win32 net_udp socket broadcast to C++ cast 2016-09-04 19:10:43 +00:00
Kp c7041a9b26 Use reinterpret_cast for digi magic value (void*)-1 2016-09-04 19:10:43 +00:00
Kp 4293227a54 Move strutil qsort comparator casts into function 2016-09-04 19:10:42 +00:00
Kp e6a082776d Fold write_key_text printf calls 2016-09-04 19:10:42 +00:00
Kp a966136424 Switch newdemo shareware workaround to C++ cast 2016-09-04 19:10:42 +00:00
Kp 39dca0999e Move aipath qsort comparator casts into function 2016-09-04 19:10:42 +00:00
Kp 11609fcdc4 Switch playsave.cpp to static_cast 2016-09-04 00:02:53 +00:00
Kp 848b99376d Switch songs.cpp to reinterpret_cast 2016-09-04 00:02:53 +00:00
Kp 2967b121b3 Switch net_udp.cpp to C++ casts 2016-09-04 00:02:53 +00:00
Kp 3308b1a554 Switch morph.cpp to reinterpret_cast 2016-09-04 00:02:53 +00:00
Kp dfef81e999 Switch laser.cpp to static_cast 2016-09-04 00:02:53 +00:00
Kp 1ca872c555 Switch seguvs.cpp to static_cast 2016-09-04 00:02:53 +00:00
Kp 53196ec990 Switch similar/arch/ogl to C++ casts 2016-09-04 00:02:53 +00:00
Kp 0e5e1a68a9 Switch interp.cpp to static_cast 2016-09-04 00:02:52 +00:00
Kp 976e4206c0 Switch multi.cpp to C++ casts 2016-09-04 00:02:52 +00:00
Kp d9a0afdcba Remove unnecessary long cast in dist_2d 2016-09-04 00:02:52 +00:00
Kp 67bf0ea1b5 Switch newdemo.cpp to C++ casts 2016-09-04 00:02:51 +00:00
Kp 5a98beae64 Switch font.cpp to static_cast 2016-09-04 00:02:51 +00:00
Kp 30a7c28cc5 Switch gr.cpp write_bmp to static_cast 2016-09-04 00:02:51 +00:00
Kp 5cdd3c60a2 Switch med_save_situation to static_cast 2016-09-04 00:02:51 +00:00
Kp 89eff29df5 Switch netmisc_calc_checksum to reinterpret_cast 2016-09-04 00:02:51 +00:00
Kp c285637cc9 Reduce scope of convert_ilbm_to_pbm rowptr 2016-09-04 00:02:51 +00:00
Kp 9a06543781 Switch terrain.cpp light cast to static_cast 2016-09-04 00:02:51 +00:00
Kp 12ee279800 Switch fireball.cpp timer cast to static_cast 2016-09-04 00:02:51 +00:00
Kp a61370ddca Check segment index in do_ambient_sounds 2016-09-04 00:02:50 +00:00
Kp 00ebdcec4a Cache Segment subscript operation in materialization handling 2016-09-04 00:02:50 +00:00
Kp ec27044f3a Check segment index in game_setup recovery code 2016-09-04 00:02:50 +00:00
Kp a4e01c3bfc Use none_of in do_controlcen_frame search of segment children
This makes the purpose of the code clearer.
2016-09-04 00:02:50 +00:00
Kp 7f264f779b Check segment index values in compress_segments 2016-09-03 17:30:18 +00:00
Kp 25a1dbe70c Cache temporaries in check_segment_connections type rewrite 2016-09-03 17:30:18 +00:00
Kp 2df93a7e88 Use range_for to iterate choose_drop_segment controlcen check 2016-09-03 17:30:18 +00:00
Kp 0104f4f938 Fix invalid access on very short exit tunnels 2016-09-03 17:30:18 +00:00
Kp 8d019a63fb Fold glTexParameteri calls 2016-09-03 17:30:18 +00:00
Kp 9d2fd0ebfa Fold glScalef calls 2016-09-03 17:30:17 +00:00
zico 8907a2bee4 Updated INSTALL.txt, README.txt, RELEASE-NOTES.txt, d1x.ini, d2x.ini for upcoming release. Updated Debian build to not include obsolete patch (it may still be broken, needs to be verified). Fixed small parsing typo in inferno.cpp help output. 2016-08-30 13:15:55 +02:00
zico b2cad09c26 Added new texture filtering options based on patch of user 'beware' 2016-08-29 20:53:10 +02:00
zico 6c6a32ba92 Added patch by user 'beware' to remove dark edges around textures and added command-line/INI option to disable this patch if desired (nostalgia). Fixed misleading indentation in ogl.cpp along the way. 2016-08-29 17:07:30 +02:00
zico ff331732ba Re-enabled timer_delay2 for general menu handlers and adjusted them to sleep according to set FPS and not sleep at all for Multiplayer since calc_frame_time() is active in that case. Modified sleeping towards 1ms in calc_frame_time() to allow for more precise target FPS and be able to relay packets in multiplayer with less delay. 2016-08-29 16:04:46 +02:00
Kp 1402a21946 Reintroduce D1 title song bug
In past releases, D1X-Rebirth played the title song even when the user
specified `-notitles`.  Commit 29f79f0a6b
("Enable -notitles for Descent 2") fixed this.  Unfortunately, despite
being called SONG_TITLE, users believe this to be main menu music, not
title screen music.  This belief is reinforced by other code sites that
play the title song on returning to the main menu.  Reintroduce the bug
by moving the call above the test for `-notitles`.  This restores the
semantics that users expect.
2016-08-28 22:41:49 +00:00
Kp c484c55153 Expand get_local_player_invulnerable_time
It was a convenient transition macro, but its presence was always
intended to be temporary.  Expand it to ease the conversion of usage
sites that already have access to local player data through a local
variable.
2016-08-28 22:41:49 +00:00
Kp 4e556efa1b Extend newdemo cloak_time hack to cover invulnerable_time
Descent demos do not record the time remaining on cloak/invulnerability,
so the demo system tries to fake it by forcing any cloaked player to
have a time remaining of 50%.  Extend that hack to do the same for
invulnerability.  The local player needs that hack.  Remote players do
not need it, but the logic is simpler with it in the loop than with a
special case for just the local player.
2016-08-28 22:41:49 +00:00
Kp 335f24ac31 Move Primary_weapon to player_info 2016-08-28 22:41:49 +00:00
Kp bfcf851f5f Remove default argument for get_mapped_weapon_index
Pass the weapon explicitly.
2016-08-28 22:41:48 +00:00
Kp 4af4f00d4b Fix weapon_id_type mismatch in do_laser_firing_player
Per comment, MK meant for this test to match the Helix cannon, but the
implementation was wrong.  Primary weapon indexes cannot be compared to
weapon ID types.  The two use different number spaces.  Using proper
enum types for each causes the compiler to report this mistake.  Fix the
test.
2016-08-28 22:41:48 +00:00
Kp 10ff2b9ea2 Change Primary_weapon_to_weapon_info key to weapon_id_type
Fix incorrect ID in D1 Primary_weapon_to_weapon_info.  Testing suggests
that both the correct and incorrect ID produce the same results.
2016-08-28 22:41:48 +00:00
Kp b7a5f65d5b Move Secondary_weapon to player_info 2016-08-28 22:41:48 +00:00
Kp 4ebf66ae7f Avoid recomputing object* in say_totals 2016-08-28 22:41:48 +00:00
Kp e7b881e5e6 Move Secondary_last_was_super into player_info 2016-08-28 22:41:48 +00:00
Kp adf5e57b47 Move Primary_last_was_super into player_info 2016-08-28 22:41:47 +00:00
Kp 8248438ffa Move Omega_charge to player_info 2016-08-28 22:41:47 +00:00
Kp dc8608cc3c Factor out player-hit-powerup logic 2016-08-28 22:41:47 +00:00
Kp 007963faad Factor out player-hit-flag handling 2016-08-28 22:41:47 +00:00
Kp 1b2052e2bc Fold do_end_briefing_screens calls to songs_play_song 2016-08-28 22:41:47 +00:00
Kp f8568d1d5f Fold proximity mine calls to multi_send_robot_fire 2016-08-25 23:31:37 +00:00
Kp 0b781e021d Use ={} to clear robot velocity 2016-08-25 23:31:37 +00:00
Kp 35928f942c Unify robot-next-gun logic
Old code:

if (condition) {
	x;
	y;
} else {
	y;
}

Change it to be:

if (condition) {
	x;
}
y;
2016-08-25 23:31:37 +00:00
Kp d75de6e705 Reduce scope of object_create_explosion_sub vforce2
Define it where it is first used.

Skip adjusting damage in cases where it will not be used.

Fix obvious copy&paste error from Parallax.

    if (condition)
        statement; statement; statement;

is parsed as:

    if (condition)
    {
        statement;
    }
    statement;
    statement;

In context, all three statements were supposed to be guarded by the
condition.  Add braces accordingly.
2016-08-25 23:31:37 +00:00
Kp ee1003f29f Move conditionally compiled code into namespace dsx 2016-08-25 04:05:32 +00:00
Kp c8ffe5d1ce Move various trigger functions into namespace dsx 2016-08-25 04:05:32 +00:00
Kp 7c348056c1 Inline triggers_frame_process 2016-08-25 04:05:32 +00:00
Kp 8409e2735c Clean whitespace in net_udp_get_new_player_num
net_udp_get_new_player_num used a strange indent convention.
Normalize the whitespace to make parsing easier.
2016-08-25 04:05:32 +00:00
Kp 3693b2317d Move HUD_render_message_frame into namespace dsx 2016-08-25 04:05:32 +00:00
Kp 6d311a97e9 Move hud weapon functions into namespace dsx 2016-08-25 04:05:32 +00:00
Kp 854907aa1b Move find_hitpoint_uv into namespace dsx 2016-08-25 04:05:32 +00:00
Kp 38b8a34d19 Normalize function return type placement
Using "type\nfunction(args)" confuses some parsing scripts.  Switch to
the standard "type function(args)" style.  Fix sites where keyword
"static" was used after the return type.
2016-08-25 04:05:31 +00:00
Kp 18a479a308 Change multi_send_macro to handle invalid inputs
No caller passes a key value other than [KEY_F9, KEY_F12].  If one did,
an invalid array reference would occur.  Restructure the code to return
on invalid inputs.  This fixes a flow control analysis warning.
2016-08-25 04:05:31 +00:00
zico 89a2df0e18 Restored object_is_trackable to its original version for D2X. Restored conditions in track_track_goal to their original version. Scale homing_missile_turn_towards_velocity by HOMING_TURN_TIME if NEWHOMER since it may not be called in every frame. 2016-08-22 13:55:09 +02:00
Kp 3d6108ae09 Include inttypes.h in playsave.cpp
Mako88 reports that an unspecified environment fails to build
playsave.cpp.  The failure is because PRIuFAST32 is undefined.  In most
environments, SDL automatically includes inttypes.h, which provides
PRIuFAST32.  In this unspecified environment, SDL does not include
inttypes.h.  Include it explicitly to ensure the definition is
available.
2016-08-20 22:28:43 +00:00
Kp 7bb3a5605b Remove useless cast in similar/editor/info.cpp 2016-08-20 22:28:43 +00:00
Kp 6691a1ff33 Split credits_show special case into dedicated functions 2016-08-19 03:41:42 +00:00
Kp 2eda0d98ee Add workaround for Win32 array::size() triggering -Wuseless-cast
As described in commit 674a921 ("Add workaround for Win32 wrong type for
size_t"), std::array on Win32 returns type std::size_t, which is
`unsigned int` instead of the `unsigned long` seen on Linux.  Calling
std::min requires both arguments to have the same type.  On Linux, this
required casting the result of size() to `unsigned` to match the other
input.  On Win32, that cast provokes a -Wuseless-cast warning.  Add a
workaround by removing the cast and instead explicitly setting the type
of std::min's arguments to `unsigned`, then relying on the compiler to
perform an implicit conversion from `unsigned long` to `unsigned int`
on Linux.  The value is always small enough to fit in an `unsigned int`,
so no precision loss will occur.
2016-08-19 03:41:42 +00:00
Kp e3ecc0715c Remove useless cast in similar/main/net_udp.cpp 2016-08-19 03:41:42 +00:00
Kp bbdecad649 Add helper macro to handle printf .* conversion for 32/64
Field width conversion `.*` always takes an `int`.

On Win32, casting `long` to `int` triggers a `-Wuseless-cast` warning.
Omitting the cast works correctly.

On Linux/amd64, casting `long` to `int` works correctly.
Omitting the cast triggers a `-Wformat` warning.

Add a macro that conditionally expands to `static_cast<int>` or to ``,
as necessary for the target platform.
2016-08-19 03:41:41 +00:00
Kp 7f0f269aec Switch write_netgame_profile to use inttypes format macros
Most 64-bit systems use `unsigned long` for `uint_fast32_t`.  Some
32-bit systems use `unsigned int` for `uint_fast32_t`.  To handle this,
write_netgame_profile used casts to `unsigned` and a format string of
`%u`.  Switch to inttypes format macros so that the format strings are
correct without requiring a cast to handle systems where `uint_fast32_t`
is not `unsigned`.
2016-08-19 03:41:41 +00:00
Kp d554b01e45 Remove useless casts in similar/editor/meddraw.cpp 2016-08-19 03:41:41 +00:00
Kp fca91b78c7 Remove useless casts in similar/main/multi.cpp 2016-08-19 03:41:41 +00:00
Kp b9399c5048 Switch multi_process_bigdata to use inttypes format macros
Most 64-bit systems use `unsigned long` for `uint_fast32_t`.  Some
32-bit systems use `unsigned int` for `uint_fast32_t`.  To handle this,
multi_process_bigdata used casts to `unsigned long` and a format string
of `%lu`.  Switch to inttypes format macros so that the format strings
are correct without requiring a cast to handle systems where
`uint_fast32_t` is not `unsigned long`.
2016-08-19 03:41:41 +00:00
zico dad3e953e9 Retored historically accurate versions of homing tracking and lifeleft calculations for D1X and D2X based on their original source code releases instead of mixing them together. Further encabsuled NEWHOMER code to disable unused functions and variables if NEWHOMER is disabled. 2016-08-17 13:43:01 +02:00
Kp 9e31914e6a Remove useless casts in similar/main/playsave.cpp 2016-08-17 04:44:22 +00:00
Kp cc74c91c89 Remove useless casts in similar/main/newdemo.cpp 2016-08-17 04:44:22 +00:00
Kp 70df47da32 Remove useless casts in similar/main/multibot.cpp 2016-08-17 04:44:22 +00:00
Kp 37fed077ee Remove useless casts in similar/arch/ogl/ogl.cpp 2016-08-17 04:44:22 +00:00
Kp 9b3adfb020 Remove useless casts in similar/arch/ogl/gr.cpp 2016-08-17 04:44:22 +00:00
Kp 6dc16bf468 Remove useless cast in similar/2d/pcx.cpp 2016-08-17 04:44:22 +00:00
Kp b1d88fd378 Remove useless cast in similar/main/iff.cpp 2016-08-17 04:44:22 +00:00
Kp 4b92942bb6 Switch newdemo.cpp to cast Secondary_weapon like Primary_weapon
Both Primary_weapon and Secondary_weapon should use the underlying enum
type.  Primary_weapon uses its enum type now.  Secondary_weapon will use
its enum type eventually.  Add appropriate casts to newdemo.cpp to keep
it working when those changes are made.
2016-08-17 04:44:22 +00:00
Kp 1d1f3f6568 Allocate fewer jukebox pointers for small files 2016-08-08 00:07:19 +00:00
Kp 7ac89d0a14 Update jukebox song count at end of read_m3u 2016-08-08 00:07:19 +00:00
Kp 2885070ba8 Remove unnecessary ~jukebox_songs
The storage is managed by a unique_ptr, so the default destructor is
sufficient.
2016-08-08 00:07:19 +00:00
Kp 68ac4acd10 Combine jukebox allocations 2016-08-06 19:55:26 +00:00
Kp 8247713850 Use RAII for m3u FILE* 2016-08-06 19:55:26 +00:00
Kp 66422a2ea3 Combine PHYSFSX_isNewPath calls in select_file_recursive2 2016-08-06 19:55:26 +00:00
Kp 5b71faacda Use RAII to remove temporary PHYSFS search path 2016-08-06 19:55:25 +00:00
Kp a09dce6ead Remove char[N] overload for PHYSFSX_getRealPath 2016-08-06 19:55:25 +00:00
Kp a98510b17e Move CMLevelMusicTrack to CCfg 2016-08-06 19:55:25 +00:00
Kp 771665835d Move LastMission to CCfg 2016-08-06 19:55:25 +00:00
Kp ac8232caca Move CMMiscMusic to CCfg 2016-08-06 19:55:25 +00:00
Kp 50599c0dad Move CMLevelMusicPath to CCfg 2016-08-06 19:55:25 +00:00
Kp b449986ea8 Use make_unique to reset editor's Current_mission 2016-08-06 19:55:25 +00:00
Kp 53deef077a Prefer make_unique over raw new 2016-08-06 19:55:24 +00:00
Kp a1ab71f5ad Avoid calling make_unique<...>({})
The compiler may or may not recognize that the temporary T{} passed to
make_unique can be omitted.  Help it by passing nothing, then explicitly
clearing the returned data as a separate step.
2016-08-06 19:55:24 +00:00
Kp cbeb42e48c Flatten some newmenu type hierarchy 2016-08-06 19:55:24 +00:00
Kp 6b4e639f65 Flatten newmenu_subfunction_t type 2016-08-06 19:55:24 +00:00
Kp c772385f81 Fix check_header_includes=1 Linux build 2016-08-06 19:55:24 +00:00
Kp 1774676571 Use class to wrap Primary_weapon+Delayed_primary 2016-08-06 19:55:23 +00:00
Kp 7128141c55 Use enum for newmenu item type 2016-08-05 04:12:21 +00:00
Kp 3f051100a5 Move newmenu_item text_len into union 2016-07-31 22:25:51 +00:00
Kp 52d0ded9ee Cache change_res resolution computations 2016-07-31 22:25:50 +00:00
Kp f5c6b0fbf6 Move newmenu_item min_value into union 2016-07-31 22:25:50 +00:00
Kp c9aba5b04e Move newmenu_item max_value into union 2016-07-31 22:25:50 +00:00
Kp 26904ea6b3 Use range_for for newmenu_create_structure radio reset 2016-07-31 22:25:50 +00:00