Compare commits

...

5 Commits

Author SHA1 Message Date
Cadey Ratio 630860a636 input display
Signed-off-by: Christine Dodrill <me@christine.website>
2021-07-26 21:35:49 -04:00
Cadey Ratio 188d91a9ec docker build 2020-10-21 23:10:45 -04:00
Cadey Ratio a49c44a017 gamebridge hacks 2020-10-21 20:27:12 -04:00
Cadey Ratio c30ec9e5c1 Merge pull request 'gamebridge: Twitch Control' (#2) from gamebridge into master 2020-05-11 22:40:03 +00:00
Cadey Ratio eb90d5dcf8 Add 'doc/inputguide.txt' 2020-05-09 21:18:50 +00:00
12 changed files with 164 additions and 20 deletions

3
.gitignore vendored
View File

@ -77,3 +77,6 @@ vblank
input
*.m64
.env
# Nix
/result

44
default.nix Normal file
View File

@ -0,0 +1,44 @@
{ pkgs ? import <nixpkgs> { } }:
with pkgs;
stdenv.mkDerivation rec {
pname = "sm64pc";
version = "latest";
buildInputs = [
gnumake
python3
audiofile
pkg-config
SDL2
libusb1
glfw3
libgcc
xorg.libX11
xorg.libXrandr
libpulseaudio
alsaLib
glfw
libGL
unixtools.hexdump
clang_10
];
src = ./.;
buildPhase = ''
chmod +x ./extract_assets.py
make -j
'';
installPhase = ''
mkdir -p $out/bin
cp ./build/us_pc/sm64.us.f3dex2e $out/bin/sm64pc
'';
meta = with stdenv.lib; {
description = "Super Mario 64 PC port, requires rom :)";
license = licenses.unfree;
};
}

51
doc/inputguide.txt Normal file
View File

@ -0,0 +1,51 @@
SUPER MARIO 64 CONTROL GUIDE
N64 BUTTON INPUT = KEYBOARD INPUT (KEYBOARD SCAN CODES)
A Button = L (38)
B Button = , (51)
Start Button = Spacebar (57)
R Button = Right Shift (54)
Z Button = K (37)
C Stick Up = Up Arrow (?)
C stick Down = Down Arrow (?)
C Stick Left = Left Arrow (?)
C Stick Right = Right Arrow (?)
Stick Up = W (17)
Stick Down = S (31)
Stick Left = A (30)
Stick Right = D (32)
KEYBOARD SCAN CODES:
Key Code ¦ Key Code ¦ Key Code
¦ ¦
Esc 1 ¦ A 30 ¦ Caps Lock 58
! or 1 2 ¦ S 31 ¦ F1 59
@ or 2 3 ¦ D 32 ¦ F2 60
# or 3 4 ¦ F 33 ¦ F3 61
$ or 4 5 ¦ G 34 ¦ F4 62
% or 5 6 ¦ H 35 ¦ F5 63
^ or 6 7 ¦ J 36 ¦ F6 64
& or 7 8 ¦ K 37 ¦ F7 65
* or 8 9 ¦ L 38 ¦ F8 66
( or 9 10 ¦ : or ; 39 ¦ F9 67
) or 0 11 ¦ " or ' 40 ¦ F10 68
_ or - 12 ¦ ~ or ` 41 ¦ F11 133
+ or = 13 ¦ Left Shift 42 ¦ F12 134
Bksp 14 ¦ | or \ 43 ¦ NumLock 69
Tab 15 ¦ Z 44 ¦ Scroll Lock 70
Q 16 ¦ X 45 ¦ Home or 7 71
W 17 ¦ C 46 ¦ Up or 8 72
E 18 ¦ V 47 ¦ PgUp or 9 73
R 19 ¦ B 48 ¦ Gray - 74
T 20 ¦ N 49 ¦ Left or 4 75
Y 21 ¦ M 50 ¦ Center or 5 76
U 22 ¦ < or , 51 ¦ Right or 6 77
I 23 ¦ > or . 52 ¦ Gray + 78
O 24 ¦ ? or / 53 ¦ End or 1 79
P 25 ¦ Right Shift 54 ¦ Down or 2 80
{ or [ 26 ¦ Prt Sc or * 55 ¦ PgDn or 3 81
} or ] 27 ¦ Alt 56 ¦ Ins or 0 82
Enter 28 ¦ Spacebar 57 ¦ Del or . 83
Ctrl 29 ¦

22
docker.nix Normal file
View File

@ -0,0 +1,22 @@
{ pkgs ? import <nixpkgs> { } }:
with pkgs;
let
site = callPackage ./default.nix { };
dockerImage = pkg:
pkgs.dockerTools.buildLayeredImage {
name = "ghcr.io/xe/sm64pc";
tag = "latest";
contents = [ pkg mesa mesa.drivers mesa_glu mesa_noglu libGL_driver ];
config = {
Cmd = [ "${strace}/bin/strace" "${pkg}/bin/sm64pc" ];
Env = [ "LD_LIBRARY_PATH=/lib" "LIBGL_DRIVERS_PATH=/lib/dri" ];
WorkingDir = "/";
};
};
in dockerImage site

View File

@ -42,7 +42,7 @@ fn main() -> Result<()> {
let mut vblank = File::open("vblank")?;
let mut input = OpenOptions::new().write(true).open("input")?;
const STICK_LERP_TIME: f64 = 270.0; // 270 frames to lerp stick positions down to 0
const STICK_LERP_TIME: f64 = 500.0; // 450 frames to lerp stick positions down to 0
const BUTTON_LERP_TIME: f64 = 20.0; // 20 frames to lerp button inputs down to 0
let st = {

View File

@ -12,9 +12,9 @@ pub(crate) fn run(st: MTState) {
async fn handle(st: MTState) {
let (nick, pass) = (
// twitch name
std::env::var("TWITCH_NICK").unwrap(),
std::env::var("TWITCH_NICK").expect("bot nickname to be in the environment"),
// oauth token for twitch name
std::env::var("TWITCH_PASS").unwrap(),
std::env::var("TWITCH_PASS").expect("bot password to be in the environment"),
);
// putting this in the env so people don't join my channel when running this
@ -87,17 +87,27 @@ async fn run_loop(
"a" => data.a_button.add(BUTTON_ADD_AMT),
"b" => data.b_button.add(BUTTON_ADD_AMT),
"z" => data.z_button.add(BUTTON_ADD_AMT),
"r" => data.r_button.add(BUTTON_ADD_AMT),
"cam" | "camera" => data.r_button.add(BUTTON_ADD_AMT),
"cup" => data.c_up.add(BUTTON_ADD_AMT),
"cdown" => data.c_down.add(BUTTON_ADD_AMT),
"cleft" => data.c_left.add(BUTTON_ADD_AMT),
"cright" => data.c_right.add(BUTTON_ADD_AMT),
"start" => data.start.add(BUTTON_ADD_AMT),
"up" => data.sticky.add(127),
"down" => data.sticky.add(-128),
"left" => data.stickx.add(-128),
"right" => data.stickx.add(127),
"up" | "u" => data.sticky.add(127),
"down" | "d" => data.sticky.add(-128),
"left" | "l" => data.stickx.add(-128),
"right" | "r" => data.stickx.add(127),
"stop" => {data.stickx.update(0); data.sticky.update(0);},
"unstuck" => {
data.a_button.update(0);
data.b_button.update(0);
data.z_button.update(0);
data.r_button.update(0);
data.c_up.update(0);
data.c_down.update(0);
data.c_left.update(0);
data.c_right.update(0);
}
_ => {},
}
}

View File

@ -5,10 +5,10 @@
"homepage": "https://github.com/nmattia/niv",
"owner": "nmattia",
"repo": "niv",
"rev": "f73bf8d584148677b01859677a63191c31911eae",
"sha256": "0jlmrx633jvqrqlyhlzpvdrnim128gc81q5psz2lpp2af8p8q9qs",
"rev": "e0ca65c81a2d7a4d82a189f1e23a48d59ad42070",
"sha256": "1pq9nh1d8nn3xvbdny8fafzw87mj7gsmp6pxkdl65w2g18rmcmzx",
"type": "tarball",
"url": "https://github.com/nmattia/niv/archive/f73bf8d584148677b01859677a63191c31911eae.tar.gz",
"url": "https://github.com/nmattia/niv/archive/e0ca65c81a2d7a4d82a189f1e23a48d59ad42070.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"nixpkgs": {
@ -17,10 +17,10 @@
"homepage": "https://github.com/NixOS/nixpkgs",
"owner": "NixOS",
"repo": "nixpkgs-channels",
"rev": "5f14d99efed32721172a819b6e78a5520bab4bc6",
"sha256": "1nxqbcsc8bfmwy450pv6s12nbvzqxai5mr6v41y478pya26lb108",
"rev": "502845c3e31ef3de0e424f3fcb09217df2ce6df6",
"sha256": "0fcqpsy6y7dgn0y0wgpa56gsg0b0p8avlpjrd79fp4mp9bl18nda",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs-channels/archive/5f14d99efed32721172a819b6e78a5520bab4bc6.tar.gz",
"url": "https://github.com/NixOS/nixpkgs-channels/archive/502845c3e31ef3de0e424f3fcb09217df2ce6df6.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
}
}

View File

@ -1,6 +1,6 @@
let
sources = import ./nix/sources.nix;
pkgs = import sources.nixpkgs { };
pkgs = import <nixpkgs> { };
in pkgs.mkShell {
buildInputs = with pkgs; [
# Mario 64

View File

@ -1258,10 +1258,24 @@ void debug_print_speed_action_normal(struct MarioState *m) {
void update_mario_button_inputs(struct MarioState *m) {
if (m->controller->buttonPressed & A_BUTTON) {
m->input |= INPUT_A_PRESSED;
print_text(210, 32, "A");
}
if (m->controller->buttonDown & A_BUTTON) {
m->input |= INPUT_A_DOWN;
print_text(210, 32, "A");
}
if (m->controller->buttonDown & B_BUTTON) {
print_text(226, 32, "B");
}
if (m->controller->buttonDown & R_TRIG) {
print_text(226, 48, "R");
}
if (m->controller->buttonDown & Z_TRIG) {
print_text(210, 48, "2");
}
// Don't update for these buttons if squished.

View File

@ -9,10 +9,10 @@
static struct ControllerAPI *controller_implementations[] = {
&controller_recorded_tas,
//&controller_gamebridge,
&controller_sdl,
&controller_keyboard,
&controller_gamebridge,
&controller_tas_recorder,
//&controller_tas_recorder,
};
s32 osContInit(OSMesgQueue *mq, u8 *controllerBits, OSContStatus *status) {

View File

@ -69,7 +69,7 @@ static void gamebridge_init(void) {
printf("[gamebridge] starting rust daemon\n");
fflush(stdout);
system("./target/debug/gamebridge &");
system("./target/release/gamebridge &");
atexit(gamebridge_close);
}

View File

@ -1,7 +1,7 @@
#ifndef GFX_SCREEN_CONFIG_H
#define GFX_SCREEN_CONFIG_H
#define DESIRED_SCREEN_WIDTH 640
#define DESIRED_SCREEN_HEIGHT 480
#define DESIRED_SCREEN_WIDTH 1366
#define DESIRED_SCREEN_HEIGHT 768
#endif