dxx-rebirth/common/main/newdemo.h

172 lines
6 KiB
C
Raw Normal View History

2006-03-20 17:12:09 +00:00
/*
2014-06-01 17:55:23 +00:00
* Portions of this file are copyright Rebirth contributors and licensed as
* described in COPYING.txt.
* Portions of this file are copyright Parallax Software and licensed
* according to the Parallax license below.
* See COPYING.txt for license details.
2006-03-20 17:12:09 +00:00
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* header for demo playback system
*
*/
#pragma once
2006-03-20 17:12:09 +00:00
#ifdef __cplusplus
2014-07-20 01:09:55 +00:00
#include "physfsx.h"
#include "fwd-object.h"
#include "fwd-window.h"
class object_signature_t;
2015-03-22 18:49:21 +00:00
#define ND_STATE_NORMAL 0
#define ND_STATE_RECORDING 1
#define ND_STATE_PLAYBACK 2
#define ND_STATE_PAUSED 3
#define ND_STATE_REWINDING 4
#define ND_STATE_FASTFORWARD 5
#define ND_STATE_ONEFRAMEFORWARD 6
#define ND_STATE_ONEFRAMEBACKWARD 7
2006-03-20 17:12:09 +00:00
#define DEMO_DIR "demos/"
2013-11-26 22:19:52 +00:00
#define DEMO_EXT "dem"
extern const array<file_extension_t, 1> demo_file_extensions;
2013-11-26 22:19:52 +00:00
#if DXX_WORDS_BIGENDIAN
#define DEMO_BACKUP_EXT "386"
#else
#define DEMO_BACKUP_EXT "ppc"
#endif
2006-03-20 17:12:09 +00:00
// Gives state of recorder
extern int Newdemo_state;
extern int NewdemoFrameCount;
extern int Newdemo_vcr_state;
extern int Newdemo_game_mode;
2006-03-20 17:12:09 +00:00
extern sbyte Newdemo_do_interpolate;
Giving credits function ability to use custom creditfile (again); Made laser-offset for laser exclusive so Prox mines won't go tru doors; Preventing cycling tru cockpit modes while dead, but allowing to load a state; Implemented D2X' lighting code to D1X (faster, better, sexier - weeee); Try to hop over some errors regarding walls/doors in levels instead of using -1 indexes for arrays; Made the briefing text ptr a bit more failsafe in case the file is corrupt/non-standard; Made scores use the menu screen even in GAME OVER; Fixed bug in neighbour fields of Weapon Keys table; Added the Weapon Keys stuff to TABLE_CREATION; Fixed bug where D2X did not recall applied resolution in the resolutions menu; Simpler check to create DEMO_DIR; Seperated X/Y sensitivity for mouse and joystick; Flush controls when Automap toggles so keypress won't deactivate it again; Made FrameCount in Demos aligned to the Dropframe condition; Added KEy to ttoggle playback text off; Gracefully exit demo code if demo is corrupt; Removed that new percent counter because many old demos seem to have corrupted last frames; Closing endlevel data file if IFF error so the mission still can be freed; Fixed Cruising for keyboard which was not aligned to FPS correctly; Used mouse delta scaling in kconfig.c instead of mouse.c to not screw up when delta is requested in non-ingame situations - it actually belongs to the controls IMHO; Now support up to 8 joysticks; Changed some leftover malloc's to d_malloc and free to d_free
2008-10-16 17:27:02 +00:00
extern int Newdemo_show_percentage;
2006-03-20 17:12:09 +00:00
//Does demo start automatically?
extern int Auto_demo;
2012-11-11 00:14:30 +00:00
extern int Newdemo_num_written;
#if defined(DXX_BUILD_DESCENT_II)
extern ubyte DemoDoRight,DemoDoLeft;
extern struct object DemoRightExtra,DemoLeftExtra;
#endif
2006-03-20 17:12:09 +00:00
struct morph_data;
2006-03-20 17:12:09 +00:00
// Functions called during recording process...
#ifdef dsx
namespace dsx {
2006-03-20 17:12:09 +00:00
extern void newdemo_record_start_demo();
Giving credits function ability to use custom creditfile (again); Made laser-offset for laser exclusive so Prox mines won't go tru doors; Preventing cycling tru cockpit modes while dead, but allowing to load a state; Implemented D2X' lighting code to D1X (faster, better, sexier - weeee); Try to hop over some errors regarding walls/doors in levels instead of using -1 indexes for arrays; Made the briefing text ptr a bit more failsafe in case the file is corrupt/non-standard; Made scores use the menu screen even in GAME OVER; Fixed bug in neighbour fields of Weapon Keys table; Added the Weapon Keys stuff to TABLE_CREATION; Fixed bug where D2X did not recall applied resolution in the resolutions menu; Simpler check to create DEMO_DIR; Seperated X/Y sensitivity for mouse and joystick; Flush controls when Automap toggles so keypress won't deactivate it again; Made FrameCount in Demos aligned to the Dropframe condition; Added KEy to ttoggle playback text off; Gracefully exit demo code if demo is corrupt; Removed that new percent counter because many old demos seem to have corrupted last frames; Closing endlevel data file if IFF error so the mission still can be freed; Fixed Cruising for keyboard which was not aligned to FPS correctly; Used mouse delta scaling in kconfig.c instead of mouse.c to not screw up when delta is requested in non-ingame situations - it actually belongs to the controls IMHO; Now support up to 8 joysticks; Changed some leftover malloc's to d_malloc and free to d_free
2008-10-16 17:27:02 +00:00
extern void newdemo_record_start_frame(fix frame_time );
}
#endif
#ifdef dsx
2016-01-09 16:38:15 +00:00
#ifdef dsx
namespace dsx {
void newdemo_record_render_object(vmobjptridx_t obj);
void newdemo_record_viewer_object(vmobjptridx_t obj);
}
#endif
icobjptridx_t newdemo_find_object(object_signature_t signature);
void newdemo_record_kill_sound_linked_to_object(vcobjptridx_t);
2016-01-09 16:38:12 +00:00
namespace dsx {
void newdemo_start_playback(const char *filename);
}
#endif
2006-03-20 17:12:09 +00:00
extern void newdemo_record_sound_3d_once( int soundno, int angle, int volume );
extern void newdemo_record_sound_once( int soundno );
extern void newdemo_record_sound( int soundno );
void newdemo_record_wall_hit_process( segnum_t segnum, int side, int damage, int playernum );
extern void newdemo_record_morph_frame(struct morph_data *);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_player_stats(int shields, int energy, int score );
void newdemo_record_wall_toggle(segnum_t segnum, int side );
2006-03-20 17:12:09 +00:00
extern void newdemo_record_control_center_destroyed();
extern void newdemo_record_hud_message(const char *s);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_palette_effect(short r, short g, short b);
extern void newdemo_record_player_energy(int);
extern void newdemo_record_player_shields(int);
extern void newdemo_record_player_flags(unsigned);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_player_weapon(int, int);
void newdemo_record_effect_blowup(segnum_t, int, const vms_vector &);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_homing_distance(fix);
extern void newdemo_record_letterbox(void);
extern void newdemo_record_rearview(void);
extern void newdemo_record_restore_cockpit(void);
extern void newdemo_record_wall_set_tmap_num1(short seg,ubyte side,short cseg,ubyte cside,short tmap);
extern void newdemo_record_wall_set_tmap_num2(short seg,ubyte side,short cseg,ubyte cside,short tmap);
extern void newdemo_record_multi_cloak(int pnum);
extern void newdemo_record_multi_decloak(int pnum);
#ifdef dsx
namespace dsx {
2006-03-20 17:12:09 +00:00
extern void newdemo_set_new_level(int level_num);
}
#endif
2006-03-20 17:12:09 +00:00
extern void newdemo_record_restore_rearview(void);
extern void newdemo_record_multi_death(int pnum);
extern void newdemo_record_multi_kill(int pnum, sbyte kill);
2017-08-13 20:38:31 +00:00
void newdemo_record_multi_connect(unsigned pnum, unsigned new_player, const char *new_callsign);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_multi_reconnect(int pnum);
extern void newdemo_record_multi_disconnect(int pnum);
extern void newdemo_record_player_score(int score);
2017-08-13 20:38:31 +00:00
void newdemo_record_multi_score(unsigned pnum, int score);
extern void newdemo_record_primary_ammo(int new_ammo);
extern void newdemo_record_secondary_ammo(int new_ammo);
void newdemo_record_door_opening(segnum_t segnum, int side);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_laser_level(sbyte old_level, sbyte new_level);
#if defined(DXX_BUILD_DESCENT_II)
void newdemo_record_trigger( segnum_t segnum, int side, objnum_t objnum,int shot );
extern void newdemo_record_player_afterburner(fix afterburner);
2006-03-20 17:12:09 +00:00
extern void newdemo_record_cloaking_wall(int front_wall_num, int back_wall_num, ubyte type, ubyte state, fix cloak_value, fix l0, fix l1, fix l2, fix l3);
extern void newdemo_record_secret_exit_blown(int truth);
#endif
2006-03-20 17:12:09 +00:00
// Functions called during playback process...
extern void newdemo_object_move_all();
extern window_event_result newdemo_playback_one_frame();
#ifdef dsx
namespace dsx {
extern window_event_result newdemo_goto_end(int to_rewrite);
}
#endif
extern window_event_result newdemo_goto_beginning();
2006-03-20 17:12:09 +00:00
// Interactive functions to control playback/record;
#ifdef dsx
namespace dsx {
2006-03-20 17:12:09 +00:00
extern void newdemo_stop_playback();
}
#endif
2006-03-20 17:12:09 +00:00
extern void newdemo_start_recording();
extern void newdemo_stop_recording();
extern int newdemo_swap_endian(const char *filename);
2006-03-20 17:12:09 +00:00
extern int newdemo_get_percent_done();
extern void newdemo_record_link_sound_to_object3( int soundno, objnum_t objnum, fix max_volume, fix max_distance, int loop_start, int loop_end );
2012-11-11 00:14:30 +00:00
void newdemo_record_guided_end();
void newdemo_record_guided_start();
int newdemo_count_demos();
2012-11-11 00:14:30 +00:00
void newdemo_strip_frames(char *, int);
2006-03-20 17:12:09 +00:00
#endif