Commit graph

4522 commits

Author SHA1 Message Date
Kp bc11b3bf85 Pass const object to draw_object_tmap_rod 2017-03-11 19:56:25 +00:00
Kp 03043f944e Guard Headlights by if(D2)
Descent 1 has no headlight powerup.  Code to read headlights was
incorrectly added in 357e1b0144, but no code was added to write
headlights, so the Descent 1 lighting code checked for headlights that
never existed.  Guard the headlight global variables and the associated
logic with if(D2).

Fixes: 357e1b0144 ("Made lighting code work with actual RGB values and added feature to let certain objects emit colored dynamic light as well as let mine flash red when control center destroyed (OpenGL-only at the moment)")
2017-03-11 19:56:25 +00:00
Kp a5444cfef1 Shorten compute_object_light 2017-03-11 19:56:24 +00:00
Kp a6c8087815 Remove unused compute_object_light parameter rotated_pnt 2017-03-11 19:56:24 +00:00
Kp dfbcc02346 Pass const object to compute_object_light 2017-03-11 19:56:24 +00:00
Kp 84faf8aa73 Pass canvas to draw_object_blob 2017-03-11 19:56:24 +00:00
Kp 26e1ce21fe Pass canvas to draw_stars 2017-03-11 19:56:24 +00:00
Kp 4e1156a996 Use canvas in OGL g3_draw_sphere 2017-03-11 19:56:24 +00:00
Kp 9ccddf5366 Pass canvas to draw_exit_model 2017-03-11 19:56:23 +00:00
Kp 86880af317 Cache canvas in credits_handler 2017-03-11 19:56:23 +00:00
Kp 72ce5d7e66 Pass canvas to draw_all_edges 2017-03-11 19:56:23 +00:00
Kp 719de35484 Pass grs_bitmap to gr_pixel 2017-03-11 19:56:23 +00:00
Kp 9311548eba Pass grs_bitmap to ogl_upixelc 2017-03-11 19:56:23 +00:00
Kp 5541e764cd Use cached canvas in font.cpp 2017-03-11 19:56:23 +00:00
Kp c725a6cb88 Pass canvas to gr_init_font 2017-03-11 19:56:22 +00:00
Kp 0c8220cc07 Pass canvas to game_draw_hud_stuff 2017-03-11 19:56:22 +00:00
Kp afb52a5a3e Pass canvas to draw_hud 2017-03-11 19:56:22 +00:00
Kp 014734834c Switch gr_printf calls to local canvas 2017-03-11 19:56:22 +00:00
Kp a19286437a Pass canvas to show_mousefs_indicator 2017-03-11 19:56:22 +00:00
Kp 4b6f42a962 Pass canvas to show_reticle 2017-03-11 19:56:22 +00:00
Kp cee6c984bd Pass canvas to hud_show_kill_list 2017-03-11 19:56:21 +00:00
Kp 5e1b27120d Pass canvas to HUD_render_message_frame 2017-03-11 19:56:21 +00:00
Kp 74d4833591 Factor out automap common assignments 2017-03-10 01:22:34 +00:00
Kp d8dc2ed985 Cache intermediate results in automap_build_edge_list 2017-03-10 01:22:33 +00:00
Kp 858807e2a5 Use range_for in automap 2017-03-10 01:22:33 +00:00
Kp adefaf0fba Simplify automap_find_edge result 2017-03-10 01:22:33 +00:00
Kp b10ec2cb01 Cache canvas in newmenu_create_structure 2017-03-10 01:22:33 +00:00
Kp e304f43efa Cache canvas in kmatrix_redraw_coop 2017-03-10 01:22:33 +00:00
Kp d5b7178fe5 Cache canvas in kmatrix_redraw 2017-03-10 01:22:33 +00:00
Kp f1d65f6b46 Cache canvas in kconfig_mouse 2017-03-10 01:22:33 +00:00
Kp 10522fd1ff Cache canvas in kconfig_draw 2017-03-10 01:22:32 +00:00
Kp 40943a6baf Cache canvas in draw_player_ship 2017-03-10 01:22:32 +00:00
Kp 07fbab437b Cache canvas in draw_invulnerable_ship 2017-03-10 01:22:32 +00:00
Kp 653c7666c9 Cache canvas in draw_weapon_box 2017-03-10 01:22:32 +00:00
Kp 3a4789c285 Pass canvas to draw_weapon_info 2017-03-10 01:22:32 +00:00
Kp 685187e2d0 Pass canvas to draw_secondary_weapon_info 2017-03-10 01:22:32 +00:00
Kp 4dae87044b Pass canvas to draw_primary_weapon_info 2017-03-10 01:22:31 +00:00
Kp 6651489643 Pass canvas to draw_weapon_info_sub 2017-03-10 01:22:31 +00:00
Kp 27140a30b9 Pass canvas to draw_numerical_display
Remove unnecessary extra call to draw_numerical_display.
2017-03-10 01:22:31 +00:00
Kp fa81835b96 Pass canvas to show_cockpit_cloak_invul_timer 2017-03-10 01:22:31 +00:00
Kp e583019958 Pass canvas to draw_shield_bar 2017-03-10 01:22:31 +00:00
Kp 0132750380 Pass canvas to draw_afterburner_bar 2017-03-10 01:22:31 +00:00
Kp 4ecae34ec5 Pass canvas to sb_draw_shield_num 2017-03-10 01:22:30 +00:00
Kp 3a8bb51e45 Pass canvas to sb_draw_afterburner 2017-03-10 01:22:30 +00:00
Kp 94f2776af4 Pass canvas to sb_draw_energy_bar 2017-03-10 01:22:30 +00:00
Kp 98a27e4f09 Cache canvas in draw_static 2017-03-10 01:22:30 +00:00
Kp 4fd064a374 Pass canvas to draw_wbu_overlay 2017-03-10 01:22:30 +00:00
Kp c5fe4f28e2 Pass canvas to hud_show_flag 2017-03-10 01:22:30 +00:00
Kp 9fb81eed3d Pass canvas to hud_show_orbs 2017-03-10 01:22:29 +00:00
Kp 817bd73e5e Pass canvas to hud_show_keys 2017-03-10 01:22:29 +00:00
Kp 3645abf0df Pass canvas to show_homing_warning 2017-03-10 01:22:29 +00:00
Kp 98463f506e Pass canvas to kc_drawinput 2017-03-10 01:22:29 +00:00
Kp ed2cb63abb Pass canvas to kc_drawquestion 2017-03-10 01:22:29 +00:00
Kp 357099d81e Pass font to get_item_height 2017-03-10 01:22:29 +00:00
Kp 4dd4e49fd1 Pass canvas to kc_gr_2y_string 2017-03-10 01:22:29 +00:00
Kp 3f15f5c0a3 Cache canvas in show_boxed_message 2017-03-10 01:22:28 +00:00
Kp f0eac8f250 Combine CM_FULL_COCKPIT, CM_REAR_VIEW switch paths 2017-03-10 01:22:28 +00:00
Kp a1e8d19715 Factor out screenshot save code 2017-03-10 01:22:28 +00:00
Kp f5a17abbe8 Pass canvas to show_HUD_names 2017-03-10 01:22:28 +00:00
Kp b6778f65c7 Cache canvas in printscreen handler 2017-03-10 01:22:28 +00:00
Kp 7410ad343c Pass canvas to render_mine 2017-03-10 01:22:28 +00:00
Kp 8542940b24 Pass canvas to render_frame 2017-03-10 01:22:27 +00:00
Kp 7e1ba509ff Cache canvas in init_cockpit 2017-03-10 01:22:27 +00:00
Kp 393e96b8d8 Unify SDL/OGL save_screen_shot
This simplifies maintenance and reduces the potential for inconsistency.
It also cleans up one existing inconsistency.
2017-03-10 01:22:27 +00:00
Kp 81cc81a6de Remove dead call to gr_set_curfont in init_editor 2017-03-10 01:22:27 +00:00
Kp 4d21fb8860 Pass canvas to init_editor_screen 2017-03-10 01:22:27 +00:00
Kp 1b8e6f5059 Cache canvas in print_status_bar 2017-03-10 01:22:27 +00:00
Kp e6878e883c Cache canvas in info_display_all 2017-03-10 01:22:26 +00:00
Kp 4a7a6663d5 Pass canvas to info_display_default 2017-03-10 01:22:26 +00:00
Kp c708d30ca4 Pass canvas to info_display_segsize 2017-03-10 01:22:26 +00:00
Kp 8708f53177 Pass canvas to info_display_object_placement 2017-03-10 01:22:26 +00:00
Kp b0f23ed7b1 Pass canvas to clear_pad_display 2017-03-10 01:22:26 +00:00
Kp 634079cfce Cache canvas in eswitch.cpp 2017-03-10 01:22:26 +00:00
Kp 242c96b679 Cache canvas in ogl/ogl.cpp 2017-03-10 01:22:26 +00:00
Kp c786e34ec7 Factor out scale_free_verts calls in med_scale_segment_new 2017-03-10 01:22:24 +00:00
Chris Taylor 38250ce76f Make sure D1 type bosses in D2 play looping sound on save game load
D1 bosses in D2 can teleport after 0.58.1.
2017-03-05 08:32:06 +08:00
Kp 2fae106945 Reindent FireLaser fusion handling to quell -Wmisleading-indentation
The code was correct as-is, but gcc-6 warns.  Reindent to eliminate the
warning.
2017-03-04 22:25:54 +00:00
Kp a8c3a7f10b Alias Side_to_verts to Side_to_verts_int 2017-03-04 22:25:54 +00:00
Kp f03fee7eca Fix ordering of boss weapon collision test
Reported-by: ryusei117 <https://github.com/dxx-rebirth/dxx-rebirth/issues/332>
Fixes: 1f929796c3 ("Fix excess fusion reflection")
2017-03-04 22:25:54 +00:00
Kp 986c76e00f Merge branch select_missile into master 2017-03-02 02:45:31 +00:00
Chris Taylor 6670d8c203 Save secondary weapons flags for 0.58.1 compatibility
Set secondary weapon flags to appropriate values when saving game, so that if it's loaded with 0.58.1 or earlier the player can actually select all secondary weapons they have at least one of (while not causing side effects with demo data). Fixes issue referred to in comment https://github.com/dxx-rebirth/dxx-rebirth/issues/291#issuecomment-282528356
2017-03-01 14:15:38 +08:00
Kp cebd2fd36d Pass object &to boss_init_all_segments
The index is not needed.
2017-03-01 02:48:41 +00:00
Kp b5294784db Pass object &to init_boss_segments
init_boss_segments no longer needs to save and restore the boss position
and size.  Remove that, and switch the pointer to `const object &` to
enforce it.
2017-03-01 02:48:40 +00:00
Kp 482dcf0ba3 Avoid temporarily moving boss while probing layout
Expose sphere_intersects_wall and call it directly from
boss_fits_in_seg, so that boss_fits_in_seg does not need to modify the
position and segment of the boss during the test.
2017-03-01 02:48:40 +00:00
Chris Taylor c2ea427f79 Don't teleport to original segment if boss won't fit
Unless there are no other segments. Fixes issue #329.
2017-02-27 18:43:24 +08:00
Chris Taylor 19e4c07bb0 Bosses generated by a robot maker or even released by another robot will now teleport
Fixes issue #328.
2017-02-26 10:21:10 +08:00
Chris Taylor 32286ed4fc Play boss looping immediately on loading saved game
If boss has teleported before, even before a loaded state was saved, play the boss looping sound immediately when loading the saved game (if near the boss). Resolves issue #326.
2017-02-26 10:21:10 +08:00
Kp ba914fea81 Pass up various return values 2017-02-26 00:00:02 +00:00
Kp 673baa15e9 Clear FakingInvul when enabling real invulnerability 2017-02-26 00:00:01 +00:00
Kp 8a89313ec4 Move compute_segment_center body to dcx 2017-02-22 03:05:44 +00:00
Kp 892d450022 Move compute_center_point_on_side body to dcx 2017-02-22 03:05:43 +00:00
Kp df54e345fe Remove write-only fvi_hit_seg 2017-02-22 03:05:43 +00:00
Kp 08e4a6e620 Use stdint constants for some INT*_MAX
clang becomes confused trying to determine which vm_distance_squared
constructor to use for a literal input of 0x7fffffffffffffff, even
though the size of the input requires it to be `long` and only one
constructor can take a `long`.  Switch from an explicit
0x7fffffffffffffff to the symbolic constant INT64_MAX, which has the
same value, but a platform-appropriate suffix to force the compiler to
pick the right type.

For general clarity, switch some other instances of integer maximum
literals to symbolic constants of the same value.

This commit has no effect on the generated code (except for changes to
line numbers).

Reported-by: kreatordxx <https://github.com/dxx-rebirth/dxx-rebirth/pull/324>
Fixes: 17208cca79 ("Disallow int for vm_distance_squared")
2017-02-22 03:05:43 +00:00
Chris Taylor 05b8cc4897 Exit GameProcessFrame() when game over
After getting game over, playing a demo would result in the 'Game Over' banner being shown. When loading a saved game, it would fail an assert when trying to obj_delete a NULL Dead_player_camera in dead_player_end().
2017-02-20 08:04:55 +08:00
Chris Taylor b17a9f8550 start_time() time when game over
After getting game over, the game would be stopped when playing a demo or loading a saved game. This is now fixed.
2017-02-20 08:04:55 +08:00
Kp dc090958d1 Reduce D1 spreadfire cost
Reported-by: zicodxx <https://github.com/dxx-rebirth/dxx-rebirth/issues/322>
Analyzed-by: kreatordxx <https://github.com/dxx-rebirth/dxx-rebirth/issues/322#issuecomment-280896375>
Fixes: 10ff2b9ea2 ("Change Primary_weapon_to_weapon_info key to weapon_id_type")
2017-02-19 19:33:45 +00:00
Kp 6cd6189681 Never pass nullptr to ai_door_is_openable
When objp is nullptr, ai_door_is_openable assumes Buddy_objnum is a
valid object number, but this assumption is not guaranteed to be true.
When it is false, the game crashes.  This crash can be triggered by a
brain robot trying to make nearby robots snipe.

Fix the crash by passing the robot of interest.

Reported-by: Yarn <http://www.dxx-rebirth.com/frm/index.php/topic,2165.0.html>
2017-02-19 19:33:45 +00:00
Kp 859b399d20 Use mask for Secondary_last_was_super 2017-02-19 19:33:45 +00:00
Kp aeb452f715 Fold do_weapon_n_item_stuff toggle sound 2017-02-19 19:33:44 +00:00
Kp 7c658fd8cd Use mask for Primary_last_was_super 2017-02-19 19:33:44 +00:00
Kp 16dde117fd Reduce scope of state_restore_all_sub j 2017-02-19 19:33:44 +00:00
Kp a6cd87613c Pass polymodel &to free_model 2017-02-19 19:33:44 +00:00
Kp 1a7659897a Pass canvas to draw_model_picture 2017-02-19 19:33:44 +00:00
Kp b02e2e9a3a Use range_for in draw_polygon_model 2017-02-19 19:33:44 +00:00
Kp 39071d124d Pass canvas to draw_polygon_model 2017-02-19 19:33:43 +00:00
Kp 92d1637b5a Pass canvas to show_time 2017-02-19 19:33:43 +00:00
Kp 91a3e0f27a Pass canvas to sb_show_lives 2017-02-19 19:33:43 +00:00
Kp 8a6be6e17f Pass canvas to hud_show_lives 2017-02-19 19:33:43 +00:00
Kp 0aaf425dab Pass canvas to hud_show_shield 2017-02-19 19:33:43 +00:00
Kp 34895edc52 Pass canvas to hud_show_cloak_invuln 2017-02-19 19:33:43 +00:00
Kp 13e9a38c7b Pass canvas to hud_show_weapons 2017-02-19 19:33:42 +00:00
Kp 16718be160 Pass canvas to hud_show_secondary_weapons_mode 2017-02-19 19:33:42 +00:00
Kp ecf53f967d Pass canvas to hud_show_primary_weapons_mode 2017-02-19 19:33:42 +00:00
Kp bbfe38cecc Pass canvas to hud_printf_vulcan_ammo 2017-02-19 19:33:42 +00:00
Kp 4206c68f44 Pass canvas to hud_set_vulcan_ammo_fontcolor 2017-02-19 19:33:42 +00:00
Kp 3eb84e9dd2 Pass canvas to hud_set_secondary_weapon_fontcolor 2017-02-19 19:33:42 +00:00
Kp 499ac14241 Pass canvas to hud_set_primary_weapon_fontcolor 2017-02-19 19:33:41 +00:00
Kp d5a197e7f3 Pass canvas to draw_primary_ammo_info 2017-02-19 19:33:41 +00:00
Kp ddb5f1c6ce Pass canvas to draw_secondary_ammo_info 2017-02-19 19:33:41 +00:00
Kp e4848e09ef Pass canvas to draw_ammo_info 2017-02-19 19:33:41 +00:00
Kp 51488e446f Pass canvas to show_bomb_count 2017-02-19 19:33:41 +00:00
Kp b45de8592a Pass canvas to hud_show_homing_warning 2017-02-19 19:33:41 +00:00
Kp 0e1a670694 Pass canvas to sb_show_score_added 2017-02-19 19:33:41 +00:00
Kp 1ebfb6c6e5 Cache canvas in draw_keys_state 2017-02-19 19:33:40 +00:00
Kp 4b1c0f4198 Combine draw_keys_state subtypes 2017-02-19 19:33:40 +00:00
Kp 205b9ddae4 Pass multires_gauge_graphic to HUD_SCALE_X_AR, HUD_SCALE_Y_AR 2017-02-19 19:33:40 +00:00
Kp e3699252f7 Pass multires_gauge_graphic to HUD_SCALE_X, HUD_SCALE_Y 2017-02-19 19:33:40 +00:00
Kp c64152fe79 Pass multires_gauge_graphic to BASE_WIDTH, BASE_HEIGHT 2017-02-19 19:33:40 +00:00
Kp 463fe1f643 Pass canvas to sb_show_score 2017-02-19 19:33:40 +00:00
Kp 7c25caafa6 Pass canvas to hud_show_score_added 2017-02-19 19:33:39 +00:00
Kp 19318b7e74 Pass canvas to hud_show_timer_count 2017-02-19 19:33:39 +00:00
Kp 960ba8a9d2 Pass canvas to hud_show_score 2017-02-19 19:33:39 +00:00
Kp 530856f909 Pass canvas to hud_gauge_bitblt 2017-02-19 19:33:39 +00:00
Kp d0bc9c1703 Pass canvas to hud_bitblt 2017-02-19 19:33:39 +00:00
Kp d98a18583b Pass canvas to hud_bitblt_free 2017-02-19 19:33:39 +00:00
Kp 1e13617c3e Pass canvas to hud_show_afterburner 2017-02-19 19:33:39 +00:00
Kp 4947779952 Pass canvas to hud_show_energy 2017-02-19 19:33:38 +00:00
Kp fbd02b5fbe Factor out template functor of create_vertex_lists_by_predicate 2017-02-19 19:33:38 +00:00
Kp b918760b3f Move find_connect_side body to dcx 2017-02-19 19:33:38 +00:00
Kp b82d9d2b51 Move get_side_verts body to dcx 2017-02-19 19:33:38 +00:00
Kp 9821a77372 Simplify use of get_num_faces 2017-02-19 19:33:38 +00:00
Kp cdb193c053 Use unsigned for sides/verts in more places 2017-02-19 19:33:38 +00:00
Kp 0f00cf51b0 Make segment vertices unsigned 2017-02-19 19:33:37 +00:00
Kp 3e51705de6 Shorten get_verts_for_normal 2017-02-19 19:33:37 +00:00
Kp 0202765322 Simplify create_walls_on_side 2017-02-19 19:33:37 +00:00
Kp c0fc6aa419 Factor out side normal initialization 2017-02-19 19:33:37 +00:00
Kp b2ca2e35df Fold add_side_as_2_triangles temporaries 2017-02-19 19:33:37 +00:00
Kp a815541ef5 Fix check_header_includes=1 poison.h 2017-02-19 19:33:36 +00:00
zico b36c6f20c7 Made scrape_player_on_wall() based on a timer. Due to the player being pushed away from the lava/water surface in every frame in a random vector (wrong, too), player movement per frame was not enough to counter this on FPS rates > ~120 which made damage scaling per frame nonsensical in these situations. Instead, execute scrape results in intevals based on DESIGNATED_GAME_FRAMETIME (or per frame if FrameTime>DESIGNATED_GAME_FRAMETIME) which fixes the issues and generally works much better for the purpose of this function. 2017-02-13 11:00:21 +01:00
Kp 569d64e927 Propagate Hack_DblClick_MenuMode 2017-02-11 21:42:47 +00:00
Kp 3de4a0b3e0 Cache canvas in show_netplayerinfo 2017-02-11 21:42:46 +00:00
Kp b116939ace Cache canvas in con_draw 2017-02-11 21:42:46 +00:00
Kp aadf18e694 Cache canvas in draw_automap 2017-02-11 21:42:46 +00:00
Kp b390ce2da0 Use cached canvas in gr_string 2017-02-11 21:42:46 +00:00
Kp fb53bc9257 Pass canvas to player_dead_message 2017-02-11 21:42:46 +00:00
Kp 00492073d2 Pass canvas to render_countdown_gauge 2017-02-11 21:42:45 +00:00
Kp 2ee8e31f9f Pass canvas to draw_window_label 2017-02-11 21:42:45 +00:00
Kp 1327dd7de6 Pass canvas to show_framerate 2017-02-11 21:42:45 +00:00
Kp 6c83d56219 Pass canvas to game_draw_marker_message 2017-02-11 21:42:45 +00:00
Kp 5fcbc44c7f Pass canvas to game_draw_multi_message 2017-02-11 21:42:45 +00:00
Kp 5736804a23 Fold gr_set_curfont calls in credits_handler 2017-02-11 21:42:45 +00:00
Kp 5f855437ed Pass canvas to name_frame 2017-02-11 21:42:45 +00:00
Kp a23f33a34d Pass canvas to draw_player 2017-02-11 21:42:44 +00:00
Kp 9ad724f32f Pass canvas to DrawMarkers 2017-02-11 21:42:44 +00:00
Kp 24c4a030a1 Pass canvas to DrawMarkerNumber 2017-02-11 21:42:44 +00:00
Kp 05905ced06 Pass font to gr_get_string_wrap 2017-02-11 21:42:44 +00:00
Kp 46be18e7f9 Pass canvas to get_centered_x 2017-02-11 21:42:44 +00:00
Kp 0fd80b12df Prevent out-of-bounds read when sorting segment sides
GCC 6 `std::sort` sometimes compares an element to itself.  For a normal
implementation of comparison, this is useless, but not harmful.  The
render comparison predicate relies on accessing A[B[a][b]] when
comparing `a` and `b`.  Array `B` has `-1` in positions where `a == b`,
which causes an access to `A[-1]`, which is undefined behavior.  This
crashes when using _GLIBCXX_DEBUG:

    Error: attempt to subscript container with out-of-bounds index -1, but
    container only holds 8 elements.

    Objects involved in the operation:
	sequence "this" @ 0x0x335adf0 {
	  type = std::__debug::array<int, 8ul>::_Array_check_subscript<8ul>;
	}

Since this is undefined behavior, non-debug builds might also misbehave.
Current data layouts make it likely that the failure would not have
externally observable consequences.

Prevent the invalid access by short-circuiting the result if `a == b`.
2017-02-11 21:42:43 +00:00
Kp ceb510566f Avoid passing reference to null weapon_object
Rebirth built with `gcc -fsanitize=undefined` warns when binding a
reference to nullptr, even if that reference is never followed.  This
could be reproduced using a guided missile against the first PIG in
Descent 2: Counterstrike level 1.

This object pointer is used only to test for address equality, so
nullptr is safe here.  Switch to pass it as a pointer to prevent the
warning.
2017-02-11 21:42:43 +00:00
Kp 40f5ad42d1 Use PUT_INTEL_INT to handle alignment when updating bitmap size 2017-02-11 21:42:43 +00:00
Kp 17208cca79 Disallow int for vm_distance_squared 2017-02-11 21:42:43 +00:00
Kp d8638c6c89 Pass canvas to UP_ARROW_MARKER, DOWN_ARROW_MARKER 2017-02-11 21:42:43 +00:00
Kp 6b8f08142f Pass canvas to LINE_SPACING
Macro LINE_SPACING previously used global grd_curcanv implicitly.
Change it to take a canvas argument.  Change all callers to pass
grd_curcanv, so that usage is explicit.
2017-02-11 21:42:42 +00:00
Kp ed9fe62d85 Expand GHEIGHT
As a macro, it always refers to the global grd_curcanv.  This interferes
with converting canvas handling to be an argument.  Expand GHEIGHT so
that uses of grd_curcanv can be changed individually.
2017-02-11 21:42:42 +00:00
Kp 03c43b1d7f Expand GWIDTH
As a macro, it always refers to the global grd_curcanv.  This interferes
with converting canvas handling to be an argument.  Expand GWIDTH so
that uses of grd_curcanv can be changed individually.
2017-02-11 21:42:42 +00:00
Kp 0d5d2e77a8 Pass canvas to g3_check_and_draw_poly 2017-02-11 21:42:42 +00:00
Kp 48bf96fe6a Pass canvas to g3_draw_bitmap 2017-02-11 21:42:42 +00:00
Kp e2ed41a90e Pass canvas to render_face 2017-02-11 21:42:42 +00:00
Kp 761c926604 Pass canvas to g3_draw_tmap_2 2017-02-11 21:42:41 +00:00
Kp f279bb8497 Pass canvas to _g3_draw_tmap_2 2017-02-11 21:42:41 +00:00
Kp ac7eac1269 Factor out _g3_draw_tmap_2 lighting checks 2017-02-11 21:42:41 +00:00
Kp f8c2c4958e Pass canvas to draw_outline 2017-02-11 21:42:41 +00:00
Kp c732c35916 Pass canvas to g3_draw_poly 2017-02-11 21:42:41 +00:00
Kp 66ee668e48 Pass canvas to _g3_draw_poly 2017-02-11 21:42:41 +00:00
Kp 85da2c0013 Pass canvas to g3_draw_polygon_model 2017-02-11 21:42:40 +00:00
Kp 0c0026ef1b Pass canvas to g3 interpreters 2017-02-11 21:42:40 +00:00
Kp b7bbe21e4d Add const to interpreter model_bitmaps 2017-02-11 21:42:40 +00:00
Kp 59b57bd7dc Pass canvas to g3_check_and_draw_tmap 2017-02-11 21:42:40 +00:00
Kp cd8f408269 Pass canvas to draw_object_tmap_rod 2017-02-11 21:42:40 +00:00
Kp 394d9e1b80 Pass canvas to g3_draw_rod_tmap 2017-02-11 21:42:40 +00:00
Kp 6a2f3c1321 Pass canvas to g3_draw_tmap 2017-02-11 21:42:39 +00:00
Kp 4791a40007 Pass canvas to _g3_draw_tmap 2017-02-11 21:42:39 +00:00
Kp 5a86bcaeb6 Cache canvas in draw_copyright 2017-02-11 21:42:38 +00:00
Kp 6f81d13c41 Pass canvas to gr_set_curfont 2017-02-11 21:42:38 +00:00
Kp 7ce7ef0ccc Pass canvas to redraw_messagestream 2017-02-11 21:42:38 +00:00
Kp a67e32d9bd Pass canvas to flash_cursor 2017-02-11 21:42:38 +00:00
Kp f88cfd9901 Cache canvas in newmenu_mouse MBTN_LEFT 2017-02-11 21:42:38 +00:00
Kp df538f1e01 Cache canvas in scores_handler EVENT_WINDOW_DRAW 2017-02-11 21:42:37 +00:00
Kp 103ed33aad Fold calls to scores_draw_item 2017-02-11 21:42:37 +00:00
Kp cbf791608d Pass canvas to scores_draw_item 2017-02-11 21:42:37 +00:00
Kp 2df20e0823 Pass canvas to scores_rprintf 2017-02-11 21:42:37 +00:00
Kp 5e2f2c0b1c Pass canvas to scores_rputs 2017-02-11 21:42:37 +00:00
Kp 3becce8cb1 Pass canvas to nm_rstring 2017-02-11 21:42:36 +00:00
Kp fbc16efa0f Pass canvas to nm_string 2017-02-11 21:42:36 +00:00
Kp 725ec77006 Avoid unnecessary allocations in nm_string
Only allocate a temporary string if a tab exists to be overwritten.
2017-02-11 21:42:36 +00:00
Kp 2c6e8fd446 Simplify nm_string 2017-02-11 21:42:36 +00:00
Kp d65ad71099 Cache newmenu_mouse LINE_SPACING 2017-02-11 21:42:35 +00:00
Kp c24ea5ae1f Fold kmatrix_status_msg format string 2017-02-11 21:42:35 +00:00
Kp beaa49a7ba Pass destination bitmap to scale_bitmap 2017-02-11 21:42:34 +00:00
Kp 590a025a89 Pass canvas to g3_start_frame 2017-02-11 21:42:34 +00:00
Kp 740b3a9649 Pass canvas to ogl_start_frame 2017-02-11 21:42:33 +00:00
Kp 80e7ade6a1 Pass canvas to g3_draw_sphere 2017-02-11 21:42:33 +00:00
Kp 513e7ceceb Pass canvas to g3_draw_line 2017-02-11 21:42:33 +00:00
Kp ae33aaafc1 Pass canvas to gr_set_fontcolor 2017-02-11 21:42:32 +00:00
Kp 0dcae721d9 Make canvas an explicit argument to gr_printf
Previously, a macro implied *grd_curcanv as the canvas.  Pass the canvas
explicitly so that callers can choose the canvas to use.
2017-02-11 21:42:32 +00:00
Kp d1657ba269 Make canvas an explicit argument to gr_uprintf
Previously, a macro implied *grd_curcanv as the canvas.  Pass the canvas
explicitly so that callers can choose the canvas to use.
2017-02-11 21:42:32 +00:00
Kp 3fb0367423 Use range_for in duplicate_group 2017-02-11 21:42:31 +00:00
Kp 227eb98c3e Pass player_info to do_cockpit_window_view 2017-02-11 21:42:31 +00:00
Kp 8783c22003 Remove obsolete ogl_pal 2017-02-11 21:42:31 +00:00
Kp 1a3d89aecf Use vsegptridx in editor group functions 2017-02-11 21:42:31 +00:00
Kp 43a700a200 Prefer grs_main_bitmap::reset() to direct reinitialization
This ensures that any allocated resources are always freed.
2017-02-11 21:42:31 +00:00
Kp 96eb8b824a Fold briefing::guy_bitmap_show into briefing::guy_bitmap 2017-02-11 21:42:31 +00:00
Kp c1440ff995 Factor out RLE expansion
Many sites open-coded walking a bitmap and handling whether it was
RLE_BIG.  Factor that out into a helper class and redirect those sites
to use it.
2017-02-11 21:42:30 +00:00
Kp 7df99350dd Pass player to do_laser_firing_player 2017-02-08 23:34:41 +00:00
Kp 82d10b910c Pass player_info to allowed_to_fire_laser 2017-02-08 23:34:41 +00:00
Chris Taylor f7471af2d6 In ReadControls, continue executing code even if HandleDeathInput handled a key event
This allows the player to press a movement key to respawn after death, and the same keypress will cause the ship to move. Now this works with the option 'when dead, respawn by pressing any key' as well as 'when dead, respawn by pressing the Fire key'.
2017-02-08 12:17:51 +08:00
Chris Taylor 88b5e616a9 Replace calls to window_set_visible in DoPlayerDead() with stop/start_time()
This is so game_flush_inputs() isn't called - part of change allowing player to respawn and begin moving with the same keypress. With this commit, you can use this feature with the 'when dead, respawn by pressing the Fire key' option - i.e. hold down movement key, then press fire key to respawn.
2017-02-08 12:17:51 +08:00
Chris Taylor 7ab97744c4 Remove call to game_flush_common_inputs() in game_flush_respawn_inputs()
Later commits will enable the player to press a movement key to respawn on death, then move with the same keypress. This commit makes sure the player stops moving when the key is released.
2017-02-08 12:17:51 +08:00
Kp d4f58d7bd3 Reload player object number after loading objects 2017-02-06 02:00:49 +00:00
Kp 98c9374a12 Simplify powerup_grab_cheat_all path
Movement handling has an ugly hack that tries to grab powerups near the
console player, but it reuses general collision handling and fails to
check whether the player is alive.

Add a liveness check.  Place the check so that it happens once, before
the objects are scanned, rather than being needlessly repeated for every
object.

Refactor the collision code to let the movement hack skip the parts it
does not need.

Reported-by: ryusei117 <https://github.com/dxx-rebirth/dxx-rebirth/issues/302#issuecomment-275816259>
2017-02-04 23:10:29 +00:00
Kp d5634f4406 Add hack for old savegames on boss levels
Reported-by: vLKp <https://github.com/dxx-rebirth/dxx-rebirth/issues/291#issuecomment-271118416>
Reported-by: kreatordxx <https://github.com/dxx-rebirth/dxx-rebirth/issues/291#issuecomment-275896181>
Fixes: df5d4196e7 ("When converting object_rw to object, recompute gun points for CT_CNTRLCEN as they are now part of object and not globals anymore")
2017-02-04 23:10:29 +00:00
Kp 62778327a7 Pass cobjptridx to apply_light 2017-01-31 04:25:06 +00:00
Kp cdfe7cc308 Merge branch cheats2 into master 2017-01-31 03:57:59 +00:00
Chris Taylor e9b0ca9a83 Don't decrement trigger in remove_trigger_num if it's trigger_none
Fixes a crash when loading a level with redundant triggers and editor enabled, e.g. Passion of Death.
2017-01-30 11:08:58 +08:00
Kp 28489e0770 Merge branch baldguy into master 2017-01-29 21:17:18 +00:00
Kp 59bad96d5f Add back homing weapons cheat for D2
Kreator proposed restoring the Descent 2 cheat that grants homing
capability to all weapons.  This commit implements that proposition,
with some changes to the implementation details.

Based-on-patch-by: Chris Taylor <chris@icculus.org>
Requested-by: Chris Taylor <https://github.com/dxx-rebirth/dxx-rebirth/pull/318>
2017-01-29 21:02:48 +00:00
Kp 32760e8a8f Simplify test for weapon_info::homing_flag 2017-01-29 21:02:38 +00:00
Kp 07200620a1 Simplify test for weapon_info::homing_flag 2017-01-29 20:57:40 +00:00
Chris Taylor 000ba37b42 Fix typo with cheat - should be 'ORALGROOVE' not 'ALGROOVE'
No noticeable effect in game, except that just typing 'ALGROOVE' will activate the cheat, which is different to original.
2017-01-29 15:19:02 +08:00
Chris Taylor 877cef9a20 Enable "BALDGUY" cheat for Descent 1
Typing "BALDGUY" after enabling cheats will activate the 'baldguy' easter egg for D1X-Rebirth, which will show next time a briefing is shown featuring Dravis (Mac D1 data only). As with the original, it just plays the 'Cheater!' sound with no HUD message.
2017-01-29 13:05:58 +08:00
Chris Taylor 56125b7e64 Get 'baldguy' cheat to work for Mac Descent 1 data
Pressing ALT-B when in the briefings using Mac Descent 1 data in D1X-Rebirth works again - showing Dravis wearing a silly hat. Before it would exit load_briefing_screen prematurely.
2017-01-29 13:05:57 +08:00
Chris Taylor 4fad71ef6d Player keeps omega cannon charge if going between secret and normal level 2017-01-29 07:54:43 +08:00
Chris Taylor 2f4db4a048 Player keeps any keys collected on a secret level even if they die on the secret level 2017-01-29 07:54:43 +08:00
Chris Taylor 4b3a34f943 Player keeps their loot if they went between a secret level and a normal level without dying 2017-01-29 07:54:43 +08:00
Kp a2d03df7aa Prevent treating dying players as weapons
Function `object_create_explosion_sub` is supposed to be given a weapon
and an object on which to explode it.  However, the original game abused
`object_create_explosion_sub` by also calling it from
`object_create_badass_explosion`, which can be called from
`explode_badass_object`, which can be called from
`explode_badass_player`.  Chained together, this lets
`object_create_explosion_sub` check the weapon ID of a dying player,
which is not a valid operation.  This causes a diagnostic from
`get_weapon_id`.  Add an explicit test that the object is a weapon so
that non-weapons do not cause a diagnostic.

Reported-by: ryusei117 <https://github.com/dxx-rebirth/dxx-rebirth/issues/302#issuecomment-272048330>
Analyzed-by: zicodxx <https://github.com/dxx-rebirth/dxx-rebirth/issues/302#issuecomment-272710279>
2017-01-28 18:12:21 +00:00
Kp 31da0f769f Fix invalid access reading demos
Commit e36abb25cb fixed one problem with demo access (invalid bits in
the high byte of index values), but created another.  That commit
switched from direct loading of `front_wall_num` to instead load into
`type`, then move the value to `front_wall_num`.  However, `type` is
`sbyte` (an archaic spelling of `int8_t`), so assignments from `type` to
`front_wall_num` were implemented as a sign-extending move, rather than
a zero-extending move.  When the wall number was 0x80 or greater, the
sign-extending move produced an incorrect result, which led to a crash
when valptridx trapped the invalid index.

Fix this by changing the types of all three byte-sized variables to
`uint8_t`.  None of them need to be signed.

Reported-by: Dosgamer <http://www.dxx-rebirth.com/frm/index.php/topic,2151.0.html>
Fixes: e36abb25cb ("Fix invalid access reading demos")
2017-01-28 18:12:21 +00:00
Kp 4881b7c57a Fix harmless type mismatch
`get_weapon_id` must be called only on objects of type `OBJ_WEAPON`.
One path in `multi_compute_kill` could call `get_weapon_id` on an object
that is either a robot or a weapon.  The code tested for a robot, but
only after performing an access that assumed it had a weapon.  Reorder
the tests to prevent the type mismatch diagnostic.

Reported-by: ryusei117 <https://github.com/dxx-rebirth/dxx-rebirth/issues/302#issuecomment-275546550>
2017-01-28 18:12:20 +00:00
Kp 8c706a88bd Initialize grs_main_bitmap at construction 2017-01-28 18:12:20 +00:00
Kp c46a0ce27c Remove some remotely-triggerable fatal exceptions
By design, valptridx will throw an exception on invalid input.  This is
better than silently permitting invalid input to corrupt program state.
Past releases blindly trusted that multiplayer peers would not send
invalid input.  Conversion to the valptridx design eliminated the
undefined behavior when peers send invalid input, but still allowed
multiplayer peers to remotely crash the game by sending invalid inputs.
Add a mechanism to trap invalid inputs and gracefully ignore those
messages.  This may cause game consistency issues, but will not allow
data corruption.
2017-01-28 18:12:20 +00:00
Kp bdc4752e82 Pass vobjptridx to multi_send_drop_flag 2017-01-28 18:12:20 +00:00