4 changed files with 96 additions and 12 deletions
-
3src/pc/controller/controller_entry_point.c
-
44src/pc/controller/controller_recorded_tas.c
-
53src/pc/controller/controller_tas_recorder.c
-
8src/pc/controller/controller_tas_recorder.h
@ -0,0 +1,53 @@ |
|||
#include <stdio.h> |
|||
#include <ultra64.h> |
|||
#include <assert.h> |
|||
#include <fcntl.h> |
|||
|
|||
#include "controller_api.h" |
|||
|
|||
static FILE *fout; |
|||
static int counter; |
|||
|
|||
#define OFFSET 0x400 |
|||
#define fname "rec.m64" |
|||
|
|||
static void tas_recorder_close(void) { |
|||
fclose(fout); |
|||
printf("[tas_recorder] saving tas data to %s\n", fname); |
|||
} |
|||
|
|||
static void tas_recorder_init(void) { |
|||
if (fname == NULL) { |
|||
fout = NULL; |
|||
return; |
|||
} |
|||
|
|||
unlink(fname); |
|||
printf("[tas_recorder] writing output to %s\n", fname); |
|||
fout = fopen(fname, "wb"); |
|||
assert(fout != NULL); |
|||
uint8_t buf[OFFSET]; |
|||
memset(buf, 0, sizeof(buf)); |
|||
fwrite(buf, 1, sizeof(buf), fout); |
|||
atexit(tas_recorder_close); |
|||
} |
|||
|
|||
static void tas_recorder_read(OSContPad *pad) { |
|||
if (fout == NULL) { |
|||
return; |
|||
} |
|||
|
|||
uint8_t bytes[4] = {0}; |
|||
int button1 = pad->button; |
|||
int button2 = pad->button; |
|||
bytes[0] = button1 >> 8; |
|||
bytes[1] = button2 & 0x00FF; |
|||
bytes[2] = pad->stick_x; |
|||
bytes[3] = pad->stick_y; |
|||
fwrite(bytes, 1, 4, fout); |
|||
} |
|||
|
|||
struct ControllerAPI controller_tas_recorder = { |
|||
tas_recorder_init, |
|||
tas_recorder_read |
|||
}; |
@ -0,0 +1,8 @@ |
|||
#ifndef CONTROLLER_TAS_RECORDER_H |
|||
#define CONTROLLER_TAS_RECORDER_H |
|||
|
|||
#include "controller_api.h" |
|||
|
|||
extern struct ControllerAPI controller_tas_recorder; |
|||
|
|||
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue