diff --git a/Cargo.toml b/Cargo.toml index 1c06b37..374d8c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "doukutsu-rs" description = "A re-implementation of Cave Story (Doukutsu Monogatari) engine" -version = "0.99.0" +version = "0.100.0" authors = ["Alula", "dawnDus"] -edition = "2018" +edition = "2021" [lib] crate-type = ["lib"] @@ -25,7 +25,7 @@ opt-level = 3 [package.metadata.bundle] name = "doukutsu-rs" identifier = "io.github.doukutsu_rs" -version = "0.99.0" +version = "0.100.0" resources = ["data"] copyright = "Copyright (c) 2020-2022 doukutsu-rs dev team" category = "Game" @@ -33,15 +33,14 @@ osx_minimum_system_version = "10.12" [features] default = ["default-base", "backend-sdl", "render-opengl", "exe"] -default-base = ["scripting-lua", "ogg-playback", "netplay"] +default-base = ["ogg-playback"] ogg-playback = ["lewton"] backend-sdl = ["sdl2", "sdl2-sys"] backend-glutin = ["winit", "glutin", "render-opengl"] render-opengl = [] scripting-lua = ["lua-ffi"] -netplay = ["tokio", "serde_cbor"] +netplay = ["serde_cbor"] editor = [] -hooks = ["libc"] exe = [] android = [] @@ -51,42 +50,40 @@ android = [] #winit = { path = "./3rdparty/winit", optional = true, default_features = false, features = ["x11"] } #sdl2 = { path = "./3rdparty/rust-sdl2", optional = true, features = ["unsafe_textures", "bundled", "static-link"] } #sdl2-sys = { path = "./3rdparty/rust-sdl2/sdl2-sys", optional = true, features = ["bundled", "static-link"] } -bitvec = "0.20" byteorder = "1.4" case_insensitive_hashmap = "1.0.0" chrono = "0.4" -cpal = "0.13" +cpal = "0.14" directories = "3" downcast = "0.11" -funty = "=1.1.0" # https://github.com/bitvecto-rs/bitvec/issues/105 -glutin = { git = "https://github.com/doukutsu-rs/glutin.git", rev = "8dd457b9adb7dbac7ade337246b6356c784272d9", optional = true, default_features = false, features = ["x11"] } -imgui = "0.8.0" -image = { version = "0.23", default-features = false, features = ["png", "bmp"] } +#glutin = { git = "https://github.com/doukutsu-rs/glutin.git", rev = "8dd457b9adb7dbac7ade337246b6356c784272d9", optional = true, default_features = false, features = ["x11"] } +glutin = { version = "0.30", optional = true, default_features = false, features = ["x11"] } +imgui = "0.8" +image = { version = "0.24", default-features = false, features = ["png", "bmp"] } itertools = "0.10" -lazy_static = "1.4.0" -lewton = { version = "0.10.2", optional = true } -libc = { version = "0.2", optional = true } +lazy_static = "1.4" +lewton = { version = "0.10", optional = true } log = "0.4" lua-ffi = { git = "https://github.com/doukutsu-rs/lua-ffi.git", rev = "e0b2ff5960f7ef9974aa9675cebe4907bee0134f", optional = true } -num-derive = "0.3.2" -num-traits = "0.2.12" -paste = "1.0.0" -pelite = "0.9.1" +num-derive = "0.3" +num-traits = "0.2" +paste = "1.0" +pelite = ">=0.9.2" sdl2 = { git = "https://github.com/doukutsu-rs/rust-sdl2.git", rev = "95bcf63768abf422527f86da41da910649b9fcc9", optional = true, features = ["unsafe_textures", "bundled", "static-link"] } sdl2-sys = { git = "https://github.com/doukutsu-rs/rust-sdl2.git", rev = "95bcf63768abf422527f86da41da910649b9fcc9", optional = true, features = ["bundled", "static-link"] } serde = { version = "1", features = ["derive"] } serde_derive = "1" -serde_cbor = { version = "0.11.2", optional = true } +serde_cbor = { version = "0.11", optional = true } serde_json = "1.0" simple_logger = { version = "1.16", features = ["colors", "threads"] } -strum = "0.20" -strum_macros = "0.20" -tokio = { version = "1.12.0", features = ["net"], optional = true } +strum = "0.24" +strum_macros = "0.24" # remove and replace when drain_filter is in stable vec_mut_scan = "0.4" -webbrowser = "0.5.5" -winit = { git = "https://github.com/alula/winit.git", rev = "6acf76ff192dd8270aaa119b9f35716c03685f9f", optional = true, default_features = false, features = ["x11"] } -xmltree = "0.10.3" +webbrowser = "0.8" +#winit = { git = "https://github.com/alula/winit.git", rev = "6acf76ff192dd8270aaa119b9f35716c03685f9f", optional = true, default_features = false, features = ["x11"] } +winit = { version = "0.27", optional = true, default_features = false, features = ["x11"] } +xmltree = "0.10" [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3", features = ["winuser"] } @@ -95,10 +92,10 @@ winapi = { version = "0.3", features = ["winuser"] } winres = "0.1" [target.'cfg(target_os = "macos")'.dependencies] -objc = "0.2.7" +objc = "0.2" [target.'cfg(target_os = "android")'.dependencies] -ndk = "0.3" -ndk-glue = "0.3" -ndk-sys = "0.2" -jni = "0.19" +ndk = "0.7" +ndk-glue = "0.7" +ndk-sys = "0.4" +jni = "0.20" diff --git a/src/builtin/builtin_data/buttons.png b/src/builtin/builtin_data/buttons.png deleted file mode 100644 index 58a2ec8..0000000 Binary files a/src/builtin/builtin_data/buttons.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/ogph/Casts.png b/src/builtin/builtin_data/headband/ogph/Casts.png deleted file mode 100644 index 78a05fc..0000000 Binary files a/src/builtin/builtin_data/headband/ogph/Casts.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/ogph/Npc/NpcGuest.png b/src/builtin/builtin_data/headband/ogph/Npc/NpcGuest.png deleted file mode 100644 index c3473d0..0000000 Binary files a/src/builtin/builtin_data/headband/ogph/Npc/NpcGuest.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/ogph/Npc/NpcMiza.png b/src/builtin/builtin_data/headband/ogph/Npc/NpcMiza.png deleted file mode 100644 index 98d1353..0000000 Binary files a/src/builtin/builtin_data/headband/ogph/Npc/NpcMiza.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/ogph/Npc/NpcRegu.png b/src/builtin/builtin_data/headband/ogph/Npc/NpcRegu.png deleted file mode 100644 index c1e9d36..0000000 Binary files a/src/builtin/builtin_data/headband/ogph/Npc/NpcRegu.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/plus/casts.png b/src/builtin/builtin_data/headband/plus/casts.png deleted file mode 100644 index bd408c7..0000000 Binary files a/src/builtin/builtin_data/headband/plus/casts.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/plus/npc/npcguest.png b/src/builtin/builtin_data/headband/plus/npc/npcguest.png deleted file mode 100644 index 54d3a1e..0000000 Binary files a/src/builtin/builtin_data/headband/plus/npc/npcguest.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/plus/npc/npcmiza.png b/src/builtin/builtin_data/headband/plus/npc/npcmiza.png deleted file mode 100644 index e86b69e..0000000 Binary files a/src/builtin/builtin_data/headband/plus/npc/npcmiza.png and /dev/null differ diff --git a/src/builtin/builtin_data/headband/plus/npc/npcregu.png b/src/builtin/builtin_data/headband/plus/npc/npcregu.png deleted file mode 100644 index 6897b3c..0000000 Binary files a/src/builtin/builtin_data/headband/plus/npc/npcregu.png and /dev/null differ diff --git a/src/builtin/builtin_data/locale/en.json b/src/builtin/builtin_data/locale/en.json deleted file mode 100644 index d3b7529..0000000 --- a/src/builtin/builtin_data/locale/en.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "name": "English", - "font": "csfont.fnt", - "font_scale": "0.5", - - "common": { - "name": "doukutsu-rs", - "back": "< Back", - "yes": "Yes", - "no": "No", - "on": "ON", - "off": "OFF" - }, - - "menus": { - "main_menu": { - "start": "Start Game", - "challenges": "Challenges", - "options": "Options", - "editor": "Editor", - "jukebox": "Jukebox", - "quit": "Quit" - }, - - "pause_menu": { - "resume": "Resume", - "retry": "Retry", - "options": "Options", - "title": "Title", - "title_confirm": "Title?", - "quit": "Quit", - "quit_confirm": "Quit?", - "add_player2": "Add Player 2", - "drop_player2": "Drop Player 2" - }, - - "save_menu": { - "new": "New Save", - "delete_info": "Press Right to Delete", - "delete_confirm": "Delete?", - "invalid_save": "Invalid Save" - }, - - "difficulty_menu": { - "title": "Select Difficulty", - "easy": "Easy", - "normal": "Normal", - "hard": "Hard" - }, - - "coop_menu": { - "title": "Select Number of Players", - "one": "Single Player", - "two": "Two Players" - }, - "skin_menu": { - "title": "Select Player 2's appearance", - "label": "Appearance:" - }, - - "challenge_menu": { - "start": "Start", - "no_replay": "No Replay", - "replay_best": "Replay Best", - "replay_last": "Replay Last", - "delete_replay": "Delete Best Replay" - }, - - "options_menu": { - "graphics": "Graphics...", - "graphics_menu": { - "window_mode": { - "entry": "Display mode:", - "windowed": "Windowed", - "fullscreen": "Fullscreen" - }, - "lighting_effects": "Lighting effects:", - "weapon_light_cone": "Weapon light cone:", - "screen_shake": { - "entry": "Screen shake intensity:", - "full": "1x", - "half": "0.5x", - "off": "Off" - }, - "motion_interpolation": "Motion interpolation:", - "subpixel_scrolling": "Subpixel scrolling:", - "original_textures": "Original textures:", - "seasonal_textures": "Seasonal textures:", - "renderer": "Renderer:", - "vsync_mode": { - "entry": "V-Sync:", - "uncapped": "Uncapped", - "uncapped_desc": "V-Sync Off.", - "vsync": "Enabled", - "vsync_desc": "V-Sync On.", - "vrr_1x": "Variable Refresh Rate (1x)", - "vrr_1x_desc": "Uses (G-/Free)Sync if available.", - "vrr_2x": "Variable Refresh Rate (2x)", - "vrr_2x_desc": "Uses (G-/Free)Sync if available.", - "vrr_3x": "Variable Refresh Rate (3x)", - "vrr_3x_desc": "Uses (G-/Free)Sync if available." - } - }, - - "sound": "Sound...", - "sound_menu": { - "music_volume": "Music Volume", - "effects_volume": "Effects Volume", - "bgm_interpolation": { - "entry": "BGM Interpolation:", - "linear": "Linear", - "linear_desc": "Fast, similar to freeware on Vista+", - "cosine": "Cosine", - "cosine_desc": "Cosine interpolation", - "cubic": "Cubic", - "cubic_desc": "Cubic interpolation", - "linear_lp": "Linear+LP", - "linear_lp_desc": "Slowest, similar to freeware on XP", - "nearest": "Nearest", - "nearest_desc": "Fastest, lowest quality" - }, - "soundtrack": "Soundtrack: {soundtrack}" - }, - - "controls": "Controls...", - - "language": "Language...", - - "behavior": "Behavior...", - "behavior_menu": { - "game_timing": { - "entry": "Game timing:", - "50tps": "50tps (freeware)", - "60tps": "60tps (CS+)" - }, - "pause_on_focus_loss": "Pause on focus loss:", - "cutscene_skip_method": { - "entry": "Cutscene Skip:", - "hold": "Hold to Skip", - "fastforward": "Fast-Forward" - } - }, - - "links": "Links..." - }, - - "controls_menu": { - "select_player": { - "entry": "Select player:", - "player_1": "Player 1", - "player_2": "Player 2" - }, - "controller": { - "entry": "Controller...", - "keyboard": "Keyboard" - }, - "rebind": "Rebind...", - "rebind_menu": { - "up": "Up", - "down": "Down", - "left": "Left", - "right": "Right", - "jump": "Jump", - "shoot": "Shoot", - "prev_weapon": "Previous weapon", - "next_weapon": "Next weapon", - "inventory": "Inventory", - "map": "Map system", - "skip": "Skip", - "strafe": "Strafe", - "menu_ok": "Menu select/confirm", - "menu_back": "Menu back/cancel" - }, - - "rebind_confirm_menu": { - "title": "Press button for \"{control}\"", - "cancel": "(Esc to cancel)" - }, - - "rumble": "Rumble:", - - "reset_confirm": "Reset...", - "reset_confirm_menu_title": "Reset controls?" - } - }, - - "soundtrack": { - "organya": "Organya", - "remastered": "Remastered", - "new": "New", - "famitracks": "Famitracks" - }, - - "game": { - "cutscene_skip": "Hold {key} to skip the cutscene" - } -} diff --git a/src/builtin/builtin_data/locale/jp.json b/src/builtin/builtin_data/locale/jp.json deleted file mode 100644 index 575e4a3..0000000 --- a/src/builtin/builtin_data/locale/jp.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "name": "Japanese", - "font": "csfontjp.fnt", - "font_scale": "0.5", - - "common": { - "name": "doukutsu-rs", - "back": "< 戻る", - "yes": "はい", - "no": "いいえ", - "on": "オン", - "off": "オフ" - }, - "menus": { - "main_menu": { - "start": "ゲームスタート", - "challenges": "チャレンジ", - "options": "オプション", - "editor": "レベルエディタ", - "jukebox": "ジュークボックス", - "quit": "辞める" - }, - "pause_menu": { - "resume": "再開", - "retry": "リトライ", - "options": "設定", - "title": "メインメニュー", - "title_confirm": "メインメニュー?", - "quit": "辞める", - "quit_confirm": "辞める?", - "add_player2": "プレーヤー2を追加", - "drop_player2": "プレーヤー2を削除" - }, - "save_menu": { - "new": "新しいデータ", - "delete_info": "右矢印キーで削除", - "delete_confirm": "消去?", - "invalid_save": "無効な保存" - }, - "difficulty_menu": { - "title": "難易度選択", - "easy": "簡単", - "normal": "普通", - "hard": "難しい" - }, - "coop_menu": { - "title": "プレイヤー数を選択", - "one": "1人プレイ", - "two": "2人プレイ" - }, - "skin_menu": { - "title": "プレーヤー2の外観を選択します", - "label": "外観:" - }, - "challenge_menu": { - "start": "スタート", - "no_replay": "ノーリプレイ", - "replay_best": "ベストプレイを再生", - "replay_last": "最後のプレイを再生", - "delete_replay": "ベストリプレイを削除" - }, - "options_menu": { - "graphics": "グラフィック", - "graphics_menu": { - "window_mode": { - "entry": "画面表示:", - "windowed": "ウィンドウ", - "fullscreen": "フルスクリーン" - }, - "lighting_effects": "ライティング効果:", - "weapon_light_cone": "兵器のライトコーン:", - "screen_shake": { - "entry": "画面の揺れ:", - "full": "1x", - "half": "0.5x", - "off": "オフ" - }, - "motion_interpolation": "モーション補間:", - "subpixel_scrolling": "サブピクセルスクロール:", - "original_textures": "オリジナルテクスチャ:", - "seasonal_textures": "季節ものテクスチャ:", - "renderer": "レンダラ:", - "vsync_mode": { - "entry": "V-Sync:", - "uncapped": "Uncapped", - "uncapped_desc": "V-Sync Off.", - "vsync": "Enabled", - "vsync_desc": "V-Sync On.", - "vrr_1x": "Variable Refresh Rate (1x)", - "vrr_1x_desc": "Uses (G-/Free)Sync if available.", - "vrr_2x": "Variable Refresh Rate (2x)", - "vrr_2x_desc": "Uses (G-/Free)Sync if available.", - "vrr_3x": "Variable Refresh Rate (3x)", - "vrr_3x_desc": "Uses (G-/Free)Sync if available." - } - }, - "sound": "サウンド", - "sound_menu": { - "music_volume": "BGM音量", - "effects_volume": "サウンド音量", - "bgm_interpolation": { - "entry": "BGM内挿:", - "linear": "線形補間", - "linear_desc": "速い、フリーウェア版に近い(Vista+)", - "cosine": "余弦", - "cosine_desc": "余弦補間", - "cubic": "立方体", - "cubic_desc": "立方体補間", - "linear_lp": "線形補間+LP", - "linear_lp_desc": "最も遅い、フリーウェア版に近い(XP)", - "nearest": "最近傍", - "nearest_desc": "最速、最低品質" - }, - "soundtrack": "サウンドトラック: {soundtrack}" - }, - - "controls": "ボタン変更", - - "language": "言語", - - "behavior": "動作", - "behavior_menu": { - "game_timing": { - "entry": "ゲームのタイミング:", - "50tps": "50tps (freeware)", - "60tps": "60tps (CS+)" - }, - "pause_on_focus_loss": "フォーカスが外れた時のポーズ:", - "cutscene_skip_method": { - "entry": "カットシーンをスキップ", - "hold": "を押し続け", - "fastforward": "はやおくり" - } - }, - "links": "リンク" - }, - - "controls_menu": { - "select_player": { - "entry": "プレイヤーを選択:", - "player_1": "プレーヤー 1", - "player_2": "プレーヤー 2" - }, - "controller": { - "entry": "コントローラ", - "keyboard": "キーボード" - }, - "rebind": "再バインド", - "rebind_menu": { - "up": "うえ", - "down": "した", - "left": "ひだり", - "right": "みぎ", - "jump": "ジャンプ", - "shoot": "ショット", - "prev_weapon": "前の武器", - "next_weapon": "次の武器", - "inventory": "在庫", - "map": "マップシステム", - "skip": "スキップ", - "strafe": "ストレイフ", - "menu_ok": "メニュー選択/OK", - "menu_back": "メニュー残す/キャンセル" - }, - - "rebind_confirm_menu": { - "title": "新しい「ジャンプ」ボタンを押す", - "cancel": "(Escキーを押してキャンセル)" - }, - - "rumble": "ランブル", - - "reset_confirm": "リセット", - "reset_confirm_menu_title": "ボタンをリセットしますか?" - } - }, - - "soundtrack": { - "organya": "オルガーニャ", - "remastered": "リマスター", - "new": "新", - "famitracks": "ファミトラック" - }, - "game": { - "cutscene_skip": "{key} を押し続け、カットシーンをスキップ" - } -} diff --git a/src/builtin/builtin_data/triangles.png b/src/builtin/builtin_data/triangles.png deleted file mode 100644 index 6130b54..0000000 Binary files a/src/builtin/builtin_data/triangles.png and /dev/null differ diff --git a/src/builtin/builtin_font.bmfc b/src/builtin/builtin_font.bmfc deleted file mode 100644 index b348b50..0000000 --- a/src/builtin/builtin_font.bmfc +++ /dev/null @@ -1,276 +0,0 @@ -# AngelCode Bitmap Font Generator configuration file -fileVersion=1 - -# font settings -fontName=JF Dot k12x10 -fontFile=JF-Dot-k12x10.ttf -charSet=0 -fontSize=10 -aa=1 -scaleH=100 -useSmoothing=0 -isBold=0 -isItalic=0 -useUnicode=1 -disableBoxChars=1 -outputInvalidCharGlyph=1 -dontIncludeKerningPairs=0 -useHinting=1 -renderFromOutline=0 -useClearType=1 -autoFitNumPages=0 -autoFitFontSizeMin=0 -autoFitFontSizeMax=0 - -# character alignment -paddingDown=0 -paddingUp=0 -paddingRight=0 -paddingLeft=0 -spacingHoriz=1 -spacingVert=1 -useFixedHeight=0 -forceZero=0 -widthPaddingFactor=0.00 - -# output file -outWidth=512 -outHeight=512 -outBitDepth=8 -fontDescFormat=2 -fourChnlPacked=0 -textureFormat=png -textureCompression=0 -alphaChnl=0 -redChnl=4 -greenChnl=4 -blueChnl=4 -invA=0 -invR=0 -invG=0 -invB=0 - -# outline -outlineThickness=0 - -# selected chars -chars=32-126,160,167-168,176-177,180,182,215,247,913-929,931-937,945-961,963-969,1025,1040-1103,1105,8208 -chars=8213,8216-8217,8229-8230,8251,8451,8470,8481,8491,8544-8553,8592-8595,8658,8660,8722,8730,8733-8734 -chars=9312-9331,9472-9475,9484,9487-9488,9491-9492,9495-9496,9499-9501,9504,9507-9509,9512,9515-9516,9519 -chars=9520,9523-9524,9527-9528,9531-9532,9535,9538,9547,9632-9633,9650-9651,9660-9661,9670-9671,9675,9678 -chars=9679,9711,9733-9734,9792,9794,9834,9837,9839,12288-12291,12293-12309,12316-12317,12319,12353-12435 -chars=12443-12446,12449-12534,12539-12542,12849-12850,12857,12964-12968,13059,13069,13076,13080,13090 -chars=13091,13094-13095,13099,13110,13115,13129-13130,13133,13137,13143,13179-13182,13198-13199,13212 -chars=13213-13214,13217,13252,13261,19968-19969,19971,19975-19979,19981-19982,19984-19985,19988-19993 -chars=19998,20001,20006,20010,20013,20017-20018,20022,20024-20025,20027-20028,20031,20034-20035,20037 -chars=20043,20045-20047,20053-20057,20061-20063,20066,20081,20083,20094,20096,20098,20101-20102,20104 -chars=20105-20108,20110,20113-20114,20116-20117,20120-20121,20123-20124,20126-20130,20132-20134,20136 -chars=20139-20142,20144,20147,20150,20154,20160-20162,20164,20166-20167,20170-20171,20173-20175,20180 -chars=20181-20185,20189-20191,20195-20197,20205-20206,20208,20210,20214-20215,20219,20225,20233-20234 -chars=20237-20241,20250,20252-20253,20271-20272,20276,20278,20280,20282,20284-20285,20291,20294-20295 -chars=20301-20305,20307,20309,20311,20313-20318,20329,20335-20336,20339,20341-20342,20347-20348,20351 -chars=20355,20358,20360,20363,20365,20367,20369,20374,20376,20379,20381,20384-20385,20395,20397-20399 -chars=20405-20406,20415,20418-20420,20426,20430,20432-20433,20436,20439-20440,20442-20443,20445,20447 -chars=20449,20451-20453,20462-20463,20467,20469-20470,20472,20474,20478,20485-20486,20489,20491,20493 -chars=20495,20497-20498,20500,20502,20505-20506,20511,20513,20515-20518,20520-20525,20534,20537,20547 -chars=20551-20553,20559-20560,20565-20566,20570,20572,20581,20588,20594,20596-20598,20600,20605,20608 -chars=20613,20621,20625,20632-20634,20652-20653,20658-20661,20663,20670,20674,20677,20681-20682,20685 -chars=20687,20689,20693-20694,20698,20702,20707,20709,20711,20717-20718,20725,20729,20731,20736-20738 -chars=20740,20745,20754,20756-20758,20760,20762,20767,20769,20778,20786,20791,20794-20796,20799-20801 -chars=20803-20809,20811-20814,20816,20818,20820,20826,20828,20834,20837,20840-20846,20849,20853-20856 -chars=20860,20864,20866,20869-20870,20873-20874,20876-20877,20879-20883,20885-20887,20889,20896,20898 -chars=20900-20902,20904-20908,20912-20919,20925,20932-20934,20937,20939-20941,20950,20955-20957,20960 -chars=20961,20966-20967,20969-20970,20973,20976-20977,20981-20982,20984-20986,20989-20990,20992,20995 -chars=20996,20998-21000,21002-21003,21006,21009,21012,21015,21021,21028-21029,21031,21033-21034,21038 -chars=21040,21043,21046-21051,21059-21060,21063,21066-21069,21071,21076,21078,21083,21086,21091-21093 -chars=21097-21098,21103-21109,21117,21119,21123,21127-21129,21133,21137-21138,21140,21147,21151-21152 -chars=21155,21161-21165,21169,21172-21173,21177,21180,21182,21185,21187,21189,21191,21193,21197,21202 -chars=21205,21207-21209,21213-21216,21218-21220,21222-21223,21234-21235,21237,21240-21242,21246-21247 -chars=21249-21250,21253-21254,21256,21261,21263-21264,21269-21271,21273-21274,21277,21280-21281,21283 -chars=21290,21295,21297,21299,21304-21307,21311-21313,21315,21317-21322,21325,21329-21332,21335-21336 -chars=21338,21340,21342,21344,21350,21353,21358-21361,21363-21365,21367-21368,21371,21375,21378,21380 -chars=21398,21400,21402,21407-21408,21413-21414,21416-21417,21421-21422,21424,21427,21430,21435,21442 -chars=21443,21448-21454,21460,21462-21463,21465,21467,21471,21473-21477,21480-21491,21494-21496,21498 -chars=21505,21507-21508,21512-21521,21531,21533,21535-21536,21542,21545,21547-21550,21558,21560-21561 -chars=21563-21566,21568,21570,21574,21576-21578,21582,21585,21599,21608,21610,21616-21617,21619,21621 -chars=21622-21623,21627-21629,21632,21636,21638,21643-21644,21646-21648,21650,21666,21668-21669,21672 -chars=21675-21676,21679,21682-21683,21688,21692-21694,21696-21698,21700,21703-21705,21720,21729-21730 -chars=21733-21734,21736-21737,21741-21742,21746,21754,21757,21764,21766-21767,21775-21776,21780,21782 -chars=21806-21807,21809,21811,21816-21817,21822,21824,21828-21830,21836,21839,21843,21846-21847,21852 -chars=21853,21859,21883-21884,21886,21888,21891-21892,21895,21897-21899,21912-21914,21916-21919,21927 -chars=21928-21932,21934,21936,21942,21956-21957,21959,21972,21978,21980,21983,21987-21988,22007,22009 -chars=22013-22014,22022,22025,22036,22038-22040,22043,22057,22063,22065-22066,22068,22070,22072,22082 -chars=22092,22094,22096,22107,22116,22120,22122-22124,22132,22136,22138,22144,22150-22151,22154,22159 -chars=22164,22176,22178,22181,22190,22196,22198,22204,22208-22211,22216,22222,22225,22227,22231-22232 -chars=22234-22235,22238,22240,22243,22254,22256,22258-22259,22265-22266,22269,22271-22272,22275-22276 -chars=22280-22281,22283,22285,22287,22290-22291,22294,22296,22300,22303,22310-22312,22317,22320,22327 -chars=22328,22331,22336,22338,22343,22346,22350-22353,22369,22372,22374,22377-22378,22399,22402,22408 -chars=22409,22411,22419,22432,22434-22436,22442,22448,22451,22464,22467,22470,22475,22478,22482-22484 -chars=22486,22492,22495-22496,22499,22516,22519,22521-22522,22524,22528,22530,22533-22534,22538-22539 -chars=22549,22553,22557,22561,22564,22570,22575-22577,22580-22581,22586,22589,22592-22593,22602-22603 -chars=22609-22610,22612,22615-22618,22622,22626,22633,22635,22640,22642,22645,22649,22654,22659,22661 -chars=22675,22679,22684,22687,22696,22699,22702,22707,22712-22715,22718,22721,22725,22727,22730,22732 -chars=22737,22739,22741,22743-22745,22748,22750-22751,22756-22757,22763-22764,22766-22770,22775,22777 -chars=22778-22781,22786,22793-22794,22799-22800,22805-22806,22808-22812,22818,22821,22823,22825-22830 -chars=22833-22834,22839-22840,22846,22852,22855-22857,22862-22865,22868-22869,22871-22872,22874,22880 -chars=22882,22885,22887-22890,22892,22894,22899-22900,22904,22909,22913-22916,22922,22925,22931,22934 -chars=22937,22939,22941,22947,22949,22952,22956,22962,22969,22971,22974,22982,22985,22987,22992-22993 -chars=22995-22996,23001-23002,23004,23013-23014,23016,23018-23019,23030,23035,23039,23041,23043,23049 -chars=23057,23064,23066,23068,23071-23072,23077,23081,23087,23093-23094,23100,23104-23105,23110,23113 -chars=23130,23138,23142,23146,23148,23167,23186,23194-23195,23228-23230,23233-23234,23241,23243-23244 -chars=23248,23254-23255,23265,23267,23270,23273,23290-23291,23305,23307-23308,23318,23330,23338,23340 -chars=23344,23346,23350,23358,23360,23363,23365,23376-23377,23380-23381,23383-23384,23386-23389,23391 -chars=23395-23398,23401,23403,23408-23409,23411,23413,23416,23418,23424,23427,23429,23431-23433,23435 -chars=23436-23437,23439,23445,23447-23453,23455,23458-23462,23470,23472,23475-23478,23480-23481,23487 -chars=23490-23495,23497,23500,23504,23506-23508,23515,23517-23519,23521-23522,23524-23529,23531,23534 -chars=23536,23539,23541-23542,23544,23546,23550-23551,23553-23554,23556-23563,23565-23567,23569,23571 -chars=23574,23578,23584,23586,23588,23592,23597,23601,23608-23617,23621-23622,23624,23626-23627,23629 -chars=23630-23633,23635,23637,23646,23648-23649,23652-23653,23660,23662-23663,23665,23670,23673,23692 -chars=23696-23697,23700,23713,23720-23721,23723-23724,23729,23731,23734-23736,23739-23740,23742,23749 -chars=23751,23769,23776-23777,23784-23786,23789,23791-23792,23798,23802-23803,23805,23815,23819,23822 -chars=23825,23828-23835,23839,23842,23849,23883-23884,23886,23888,23890,23900,23913,23916,23919,23923 -chars=23926,23938,23940,23943,23947-23948,23952,23965,23970,23980,23982,23991,23994,23996-23997,24009 -chars=24012-24013,24018-24019,24022,24027,24029-24030,24033,24035,24037-24040,24043,24046,24049-24053 -chars=24055,24059,24061-24062,24066-24067,24070,24075-24076,24081,24086,24089-24091,24093,24101,24107 -chars=24109,24111-24112,24115,24118-24120,24125,24128,24131-24133,24135,24140,24142,24148-24149,24151 -chars=24159,24161-24164,24178-24182,24184-24191,24193,24195-24196,24199,24202,24207,24213-24215,24218 -chars=24220,24224,24230-24231,24235,24237,24245-24248,24257-24259,24264-24266,24271-24272,24275,24278 -chars=24282-24283,24285,24287-24291,24296-24297,24300,24304-24305,24307-24308,24310-24312,24314-24316 -chars=24318-24319,24321,24323-24324,24329-24333,24335-24337,24339-24344,24347,24351,24357-24359,24361 -chars=24365,24367,24369,24373,24375-24376,24380,24382,24385,24392,24394,24396,24398,24401,24403,24406 -chars=24407,24409,24412-24413,24417-24418,24422,24425-24429,24432-24433,24435,24439,24441,24444,24447 -chars=24448-24453,24455-24456,24458-24460,24464-24467,24471-24473,24478,24480-24481,24488-24490,24493 -chars=24494,24499-24500,24505,24508-24509,24515,24517,24524-24525,24534-24537,24540-24541,24544,24548 -chars=24555,24560-24561,24565,24568,24571,24573,24575,24590-24592,24594,24597-24598,24601,24603-24605 -chars=24608-24609,24613-24619,24623,24625,24634,24641-24643,24646,24650-24651,24653,24656,24658,24661 -chars=24665-24666,24671-24672,24674-24677,24680-24685,24687-24688,24693,24695,24705,24707-24708,24713 -chars=24715-24717,24722,24724,24726-24727,24730-24731,24735-24736,24739,24742-24743,24745-24746,24754 -chars=24755-24758,24760,24764-24765,24773-24775,24785,24787,24792,24794,24796,24799-24801,24803,24807 -chars=24808,24816-24817,24819-24820,24822-24823,24825-24827,24832-24833,24835,24838,24840-24841,24845 -chars=24846-24847,24853,24858-24859,24863,24865,24871-24872,24876,24884,24892-24895,24898,24900,24903 -chars=24904,24906-24910,24915,24917,24920-24922,24925,24927,24930-24931,24933,24935-24936,24939,24942 -chars=24943-24945,24947-24951,24958,24962,24967,24970,24974,24976-24977,24980,24982,24985-24986,24996 -chars=24999,25001,25003-25004,25006,25010,25014,25018,25022,25027,25030-25037,25040,25059,25062,25074 -chars=25076,25078-25080,25082,25084-25088,25096-25098,25100-25102,25104-25106,25108,25110,25114-25115 -chars=25117-25119,25121,25126,25130,25134-25136,25138-25140,25144,25147,25151-25153,25159-25161,25163 -chars=25165-25166,25171,25173,25176,25179,25182,25184,25187,25192,25198,25201,25206,25209,25212,25214 -chars=25215-25216,25218-25220,25225-25226,25233-25240,25243-25244,25246,25259-25260,25265,25269,25273 -chars=25275-25277,25282,25285-25290,25292-25293,25295-25300,25303-25305,25307-25309,25312-25313,25324 -chars=25325-25327,25329,25331,25333-25335,25342-25343,25345-25346,25351-25353,25356,25361,25369,25375 -chars=25383-25384,25387,25391,25402,25405-25407,25417,25420-25421,25423-25424,25429,25431,25436,25447 -chars=25448-25449,25451,25454,25458,25462-25463,25466-25467,25472,25475,25480-25481,25484,25486-25487 -chars=25490,25494,25496,25499,25503-25507,25509,25511-25516,25522,25524-25525,25531,25534,25536,25539 -chars=25540,25542,25545,25551-25552,25554,25558,25562-25563,25569,25571,25577,25582,25588,25590,25594 -chars=25606,25613,25615,25619,25622-25623,25628,25638,25640,25644-25645,25652,25654,25658,25662,25666 -chars=25678,25688,25703,25705,25711,25718,25720,25722,25731,25736,25746-25747,25749,25754,25758,25764 -chars=25765,25769,25771,25773-25774,25776,25778,25785,25787-25788,25793-25794,25797,25799,25805,25810 -chars=25812,25816,25818,25824-25827,25830-25831,25836,25839,25841-25842,25844,25846,25850,25853-25854 -chars=25856,25861,25880,25884-25885,25891-25892,25898-25900,25903,25908-25913,25915,25918-25919,25925 -chars=25928,25933,25935,25937,25941-25945,25949-25950,25954-25955,25958,25964,25968,25970,25972-25973 -chars=25975-25976,25986-25987,25991-25993,25996,25998,26000-26001,26007,26009,26011-26012,26015,26017 -chars=26020-26021,26023,26027-26029,26031-26032,26039,26041,26044-26045,26049,26051-26054,26059-26060 -chars=26063,26066,26071,26073,26075,26080-26082,26085-26089,26092-26093,26097,26106-26107,26114-26115 -chars=26118-26119,26122,26124,26126-26127,26131-26132,26140,26143-26144,26149,26151-26152,26157,26159 -chars=26164-26166,26172,26175,26177-26180,26185,26187,26191,26194,26205-26207,26210,26212,26214-26217 -chars=26222-26224,26228,26230,26234,26241,26243-26244,26247-26249,26254,26257,26262-26264,26269,26274 -chars=26278,26283,26286,26292,26296-26297,26300,26302,26305,26308,26311,26313,26326,26329-26330,26332 -chars=26333,26336,26342,26345,26352,26354-26357,26359-26361,26364-26368,26371,26376-26377,26379,26381 -chars=26383,26388-26391,26395,26397-26399,26406-26408,26410-26414,26417,26420,26422-26424,26426,26429 -chars=26431,26433,26438,26441,26446-26449,26451,26454,26457,26460,26462-26469,26474,26477,26479-26483 -chars=26485,26487,26492,26494-26495,26501,26503,26505,26507-26508,26512,26517,26519,26522,26524-26525 -chars=26528-26530,26534,26537,26543,26547-26548,26550-26553,26561,26564,26566,26570,26574-26577,26579 -chars=26580,26584,26586,26589-26590,26594,26596,26599,26601,26604,26606-26607,26609,26611-26613,26619 -chars=26622-26623,26626-26628,26643,26646-26647,26654,26657-26658,26665-26667,26674,26676,26680-26681 -chars=26684-26685,26688-26691,26694,26696,26701-26702,26704-26705,26707-26708,26713,26716-26717,26719 -chars=26723,26727,26740,26742-26743,26750-26751,26753,26755,26757,26765,26767,26771-26772,26775,26779 -chars=26781,26783-26784,26786,26790-26792,26797,26799-26801,26803,26805-26806,26809-26810,26812,26820 -chars=26822,26825-26827,26829,26834,26836-26837,26839-26840,26842,26847-26849,26851,26855,26862-26863 -chars=26866,26873-26874,26880-26881,26884-26885,26888,26891-26895,26898,26905-26908,26913-26915,26917 -chars=26918,26920,26922,26928,26932,26934,26937,26941,26943,26954,26963-26965,26969-26970,26972-26974 -chars=26976-26978,26986-26987,26989-26991,26995-26997,26999-27001,27004-27006,27009-27010,27018,27022 -chars=27025,27028-27029,27035-27036,27040,27047,27054,27057-27058,27060,27067,27070-27071,27073,27075 -chars=27079,27082-27086,27088,27091,27096-27097,27101-27102,27111-27112,27115,27117,27122,27129,27131 -chars=27133,27135,27138,27141,27146-27148,27154-27156,27159,27161,27163,27166-27167,27169-27171,27177 -chars=27178-27179,27182,27189-27190,27192-27194,27197,27204,27207-27208,27211,27224-27225,27231,27233 -chars=27234,27238,27250,27256,27263-27264,27268,27277-27278,27280,27287,27292,27296,27298-27299,27306 -chars=27308,27310,27315,27320,27323,27329-27331,27345,27347,27354-27355,27358-27359,27368,27370,27386 -chars=27387,27396-27397,27402,27410,27414,27421,27423-27425,27427,27431,27442,27447-27450,27453-27454 -chars=27459,27463,27465,27468,27470,27472,27475-27476,27481,27483,27487,27489-27492,27494,27497-27498 -chars=27503,27507-27508,27512-27513,27515,27519-27520,27523-27524,27526,27529-27531,27533,27541-27542 -chars=27544,27550,27556,27562-27563,27567,27569-27573,27575,27578-27580,27583-27584,27589-27590,27595 -chars=27597-27598,27602-27604,27608,27611,27615,27627-27628,27631,27635,27656,27663,27665,27667-27668 -chars=27671,27675,27683-27684,27700,27703-27704,27710,27712-27714,27726,27728,27733,27735,27738,27741 -chars=27742-27744,27746,27752,27754,27760,27762-27763,27770,27773-27774,27777-27779,27784,27788-27789 -chars=27792,27794-27795,27798,27801-27803,27809-27810,27819,27822,27825,27827,27832-27839,27841,27844 -chars=27845,27849-27850,27852,27859,27861,27863,27865,27867,27869,27873-27875,27877,27880,27882,27887 -chars=27888-27889,27891,27915,27922,27927,27934,27941,27946,27963,27966,27969,27972-27973,27996,28006 -chars=28009-28010,28014,28020,28023-28024,28040,28057,28079,28082,28092,28096,28129,28145,28147,28151 -chars=28155,28165,28167-28169,28171,28187,28193,28198,28201,28204,28207,28246,28248,28263,28271,28286 -chars=28287-28288,28304,28310,28316-28317,28322,28342,28357,28363,28369,28381-28382,28402,28404,28417 -chars=28418,28431,28436,28448,28450,28459-28460,28500,28508,28511,28516,28526,28528,28548,28580,28608 -chars=28609,28611,28641,28655,28716,28779,28783-28784,28796-28797,28809-28810,28814,28818,28844-28845 -chars=28857-28858,28872,28954,28961,28966,28982,28988,29017,29031,29033,29038,29053,29066,29087,29105 -chars=29123,29157,29165,29173,29190,29226,29238,29242,29245,29255-29256,29273,29275,29282,29287,29289 -chars=29298,29305,29344,29356,29359,29366,29378,29401,29417,29420-29421,29436,29467,29471,29482-29483 -chars=29486,29494,29503,29508,29539,29554,29572,29575,29577,29579,29645,29664,29677,29694,29699,29702 -chars=29705,29730,29748,29790,29863,29872,29926,29942,29976,29983,29987,29992,30000-30003,30007,30010 -chars=30011,30028,30033,30041,30044,30053,30058,30064,30067,30079,30094,30097,30123,30130,30142,30149 -chars=30151,30169,30171,30185,30196,30202,30221,30274,30284,30290,30294,30330-30331,30333-30334,30340 -chars=30342-30343,30382,30394,30399,30406,30410,30423,30427,30431,30435-30436,30439,30446,30450,30452 -chars=30456,30462,30465,30473,30475-30476,30494-30496,30505,30522,30524,30528,30561,30563,30568,30609 -chars=30636,30643,30652,30683,30690,30693,30697,30701,30703,30707,30722,30740-30741,30770,30772,30813 -chars=30828,30849,30906,30913,30952,30990,31034,31036,31038,31048-31049,31062,31069-31070,31077,31080 -chars=31085,31105,31119,31168-31169,31179,31185-31186,31192,31199,31209,31216,31227,31232,31243,31246 -chars=31258,31278,31282,31292-31293,31295,31298,31309,31311,31339,31348,31350,31354,31361,31363,31379 -chars=31391,31406,31435,31452,31456,31461,31471,31478,31481,31499,31505,31515,31520,31526,31532,31545 -chars=31558,31560-31561,31563,31570,31572,31574,31623,31639,31649,31665,31672,31680,31684,31687,31689 -chars=31761,31777,31807,31821,31840,31859,31881,31883,31890,31896,31911,31934,31958,31966,31975,31992 -chars=31995,32000,32004-32005,32011,32013,32016,32020,32025-32027,32032,32034,32043,32047-32048,32051 -chars=32057-32058,32066,32068,32070,32076,32080,32094,32097,32102,32113,32117-32118,32121,32153-32154 -chars=32173,32177-32178,32180,32186-32187,32190-32191,32202,32207,32209-32210,32218,32224,32232-32233 -chars=32239,32244,32257,32260,32283,32294,32302,32318,32321,32330-32331,32340,32368,32566,32608,32618 -chars=32622,32624,32626,32645,32650,32654,32676,32680-32681,32701,32709,32716,32722,32724,32763-32764 -chars=32769,32771,32773,32784,32791,32819,32854,32862,32865,32884,32887,32905,32908,32918,32925,32929 -chars=32930,32933,32937-32938,32943,32946,32954,32963,32966,32972,32974,32990,32993,33016,33021,33026 -chars=33029-33032,33050,33073,33075,33104,33107,33109,33131,33136,33144-33146,33178,33180-33181,33192 -chars=33222,33235,33251,33256,33258,33261,33267-33268,33288,33292,33294,33296,33303,33307,33310-33311 -chars=33322,33324,33337,33351,33382,33391,33394,33398,33437,33446,33455,33457,33459,33464,33469,33495 -chars=33499,33509-33510,33521,33538,33540,33576,33590,33609,33618,33624,33655,33707,33733,33738,33740 -chars=33747,33756,33775,33777,33804,33853,33865,33879,33883,33891,33900,33945,33976,33980,33988,33995 -chars=34001,34030,34101,34109,34126,34180,34183,34196,34199,34214,34219-34220,34253,34276,34281,34299 -chars=34311,34349,34382,34384,34394,34411,34425,34442,34503,34509,34521,34678,34701,34811,34821,34880 -chars=34886,34892,34899,34903,34907,34909,34913,34915,34920,34928,34955,34966,34987,35009-35010,35013 -chars=35023,35029,35036,35064,35069-35070,35079,35090,35186,35199,35201,35206-35207,35211,35215,35222 -chars=35223,35226,35239,35242,35251,35282,35299,35302,35328,35330,35336,35338,35342,35347,35351-35352 -chars=35357,35359,35363,35370,35373,35377,35379-35380,35386,35388,35408,35413,35422,35430,35433,35435 -chars=35438,35440-35443,35463,35465,35468-35469,35475,35477,35480,35486,35488,35492,35500-35501,35504 -chars=35506,35519,35527,35531,35542,35558,35565-35566,35576,35582,35584,35598,35609,35611,35613,35617 -chars=35672,35676,35686,35696,35698,35703,35728,35895,35910,35914,35930,35937,35946,35980,35997-35998 -chars=36000-36002,36007-36009,36011-36012,36015-36016,36020,36022-36024,36027-36028,36031-36032,36035 -chars=36039,36042,36049,36059,36062,36064,36066,36074,36077,36092,36101,36104,36196,36198,36208,36212 -chars=36215,36229,36234,36259,36275,36317,36321,36335,36339,36341,36362,36367,36468,36487,36490,36493 -chars=36523,36554,36556-36557,36562,36575,36578,36600,36605,36611,36617,36628,36637,36649-36650,36664 -chars=36676,36763,36766,36784-36786,36794-36796,36799,36804-36805,36814,36817,36820,36843,36848,36855 -chars=36861,36864-36865,36867,36870,36879,36884,36889-36890,36893,36895-36896,36899,36910,36913-36914 -chars=36920,36930,36933,36935,36938-36939,36941-36942,36947-36949,36960-36961,36963,36965,36969,36973 -chars=36974,36981,36983-36984,36986,36989,36991,36996,37027,37030,37034,37048,37066,37070,37089,37096 -chars=37101,37109,37111,37117,37197-37198,37202,37204,37218,37228,37237,37239-37240,37266,37276,37284 -chars=37320,37324-37327,37329,37340-37341,37347,37351,37389,37428,37444,37474,37489,37504,37507,37509 -chars=37528,37549,37613,37628,37679,37682,37707,37723,37749,37772,37782,37806,37857,37912,37969,38263 -chars=38272,38275,38281,38283,38291,38306-38307,38309,38322,38343,38346,38360,38428,38442,38450,38459 -chars=38463-38464,38477,38480,38498-38501,38506,38512,38515,38518,38520,38522,38525,38533-38534,38538 -chars=38542-38543,38548,38553,38555-38556,38560,38563,38583,38588,38592,38596-38599,38609,38626-38627 -chars=38632,38634,38640,38642,38646-38647,38651,38656,38663,38666,38686,38695,38706,38738,38742,38745 -chars=38750,38754,38761,38772,38788,38867,38899,38907,38911,38913-38915,38917-38918,38920,38928-38929 -chars=38931,38936,38956-38957,38967,38971-38972,38988-38990,38996-38997,39000,39006,39015,39080,39082 -chars=39131,39135,39138,39151,39154,39156,39164-39166,39171,39173,39178,39180,39208,39318,39321,39340 -chars=39348,39364-39366,39376,39378,39423,39438,39442-39443,39449,39472,39514,39592,39608,39640,39658 -chars=39661,39706,39729,39740,39745-39746,39749,39764,39770,39791,39854,39881,40165,40169,40180,40335 -chars=40372,40441,40474-40475,40478,40565,40568-40569,40573,40575,40577,40584,40587-40588,40593-40595 -chars=40597,40599,40605,40607,40613-40614,40617-40618,40621,40632-40636,40638-40639,40644,40652-40656 -chars=40658,40660,40664-40665,40667-40670,40672,40677,40680,40687,40692,40694-40695,40697,40699-40701 -chars=40711-40712,40718,40723,40725,40736-40737,40748,40763,40766,40778-40779,40782-40783,40786,40788 -chars=40799-40803,40806-40807,40810,40812,40818,40822-40823,40845,40853,40860-40861,40864,65281,65283 -chars=65284-65286,65288-65374,65377-65439,65504-65507,65509 - -# imported icon images diff --git a/src/builtin/builtin_font.fnt b/src/builtin/builtin_font.fnt deleted file mode 100644 index 3986e9c..0000000 Binary files a/src/builtin/builtin_font.fnt and /dev/null differ diff --git a/src/builtin/builtin_font_0.png b/src/builtin/builtin_font_0.png deleted file mode 100644 index 6e588e3..0000000 Binary files a/src/builtin/builtin_font_0.png and /dev/null differ diff --git a/src/builtin/builtin_font_1.png b/src/builtin/builtin_font_1.png deleted file mode 100644 index ff27aba..0000000 Binary files a/src/builtin/builtin_font_1.png and /dev/null differ diff --git a/src/builtin/gamecontrollerdb.txt b/src/builtin/gamecontrollerdb.txt deleted file mode 100644 index fe21dd6..0000000 --- a/src/builtin/gamecontrollerdb.txt +++ /dev/null @@ -1,1741 +0,0 @@ -# Game Controller DB for SDL in 2.0.16 format -# Source: https://github.com/gabomdq/SDL_GameControllerDB - -# Windows -03000000300f00000a01000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, -03000000fa2d00000100000000000000,3dRudder Foot Motion Controller,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows, -03000000d0160000040d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, -03000000d0160000050d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, -03000000d0160000060d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, -03000000d0160000070d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, -03000000d0160000600a000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, -03000000c82d00000031000000000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000531000000000000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000951000000000000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, -03000000008000000210000000000000,8BitDo F30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -030000003512000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000c82d00001028000000000000,8BitDo F30 Arcade Joystick,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000151000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00005106000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,guide:b2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000451000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, -03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d0000e002000000000000,8BitDo N30,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b6,platform:Windows, -03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000290000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, -03000000c82d00003038000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, -030000003512000012ab000000000000,8BitDo NES30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Windows, -03000000c82d000012ab000000000000,8BitDo NES30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000022000000090000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000203800000900000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00002038000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000751000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000851000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000361000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000660000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000131000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000231000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000331000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000431000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00002867000000000000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b10,x:b3,y:b4,platform:Windows, -03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000060000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000061000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000102800000900000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00003028000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -030000003512000020ab000000000000,8BitDo SN30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000351000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a2,rightshoulder:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00004028000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00006228000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000021000000000000,8BitDo SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000121000000000000,8BitDo SN30 Pro for Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00000260000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00000261000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -03000000a00500003232000000000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, -03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, -03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, -030000008f0e00001200000000000000,Acme GA02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -03000000c01100000355000000000000,Acrux,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000fa190000f0ff000000000000,Acteck AGJ 3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000d1180000402c000000000000,ADT1,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a3,rightx:a2,righty:a5,x:b3,y:b4,platform:Windows, -03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001301000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00001302000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00001304000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00001413000000000000,Afterglow Xbox Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00003901000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ab1200000103000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000000f9000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000100000008200000000000000,Akishop Customs PS360,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000007c1800000006000000000000,Alienware Dual Compatible PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, -03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, -03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows, -03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows, -03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -03000000869800002500000000000000,Astro C40 TR PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000d6200000e557000000000000,Batarang PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows, -030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ad1b000001f9000000000000,BB 070,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000bc2000005250000000000000,Beitong G3,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a3,righty:a4,start:b15,x:b3,y:b4,platform:Windows, -030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000bc2000000055000000000000,Betop BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -030000006f0e00006401000000000000,BF One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, -03000000300f00000202000000000000,Bigben,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a5,righty:a2,start:b7,x:b2,y:b3,platform:Windows, -030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, -03000000120c0000200e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000210e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f10e000000000000,Brook PS2 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000310c000000000000,Brook Super Converter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows, -030000005b1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, -030000005b1c00002500000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, -030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000b0400003365000000000000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows, -030000004c050000c505000000000000,CronusMax Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000d814000007cd000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000d8140000cefa000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows, -030000003807000002cb000000000000,Cyborg,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000a306000022f6000000000000,Cyborg V.3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000f806000000a3000000000000,DA Leader,a:b7,b:b6,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b8,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:b3,rightx:a2,righty:a3,start:b12,x:b4,y:b5,platform:Windows, -030000001a1c00000001000000000000,Datel Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000c0160000e105000000000000,Dual Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows, -030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -03000000bd12000002e0000000000000,Dual Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, -03000000ff1100003133000000000000,DualForce,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b1,platform:Windows, -030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, -03000000317300000100000000000000,DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -030000006f0e00003001000000000000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000fc0400000250000000000000,Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows, -03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, -03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, -030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, -03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, -030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, -030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, -030000006e0500000f20000000000000,Elecom U4013S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, -030000006e0500001320000000000000,Elecom U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006e0500001020000000000000,Elecom U4113S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, -030000006e0500000720000000000000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, -030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows, -03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, -03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, -03000000341a00000108000000000000,EXEQ RF Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000006f0e00008401000000000000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00008001000000000000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000021000000090000000000000,FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, -0300000011040000c600000000000000,FC801,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, -03000000852100000201000000000000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ad1b000028f0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b00002ef0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000038f0000000000000,Fightpad TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, -03000000f806000001a3000000000000,Firestorm,a:b9,b:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b10,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b12,x:b8,y:b4,platform:Windows, -03000000b50700000399000000000000,Firestorm 2,a:b2,b:b4,back:b10,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,righttrigger:b9,start:b11,x:b3,y:b5,platform:Windows, -03000000b50700001302000000000000,Firestorm D3,a:b0,b:b2,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,x:b1,y:b3,platform:Windows, -03000000b40400001024000000000000,Flydigi Apex,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000151900004000000000000000,Flydigi Vader 2,a:b11,b:b10,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,leftstick:b1,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b0,righttrigger:b4,rightx:a3,righty:a4,start:b2,x:b9,y:b8,platform:Windows, -03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b4,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Windows, -03000000b40400001224000000000000,Flydigi Vader 2 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,paddle3:b17,paddle4:b18,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, -030000008305000000a0000000000000,G08XU,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b5,x:b2,y:b3,platform:Windows, -0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, -03000000260900002625000000000000,GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows, -03000000341a000005f7000000000000,GameCube Controller,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows, -03000000430b00000500000000000000,GameCube Controller,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows, -03000000790000004718000000000000,GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -030000008f0e00000d31000000000000,Gamepad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ac0500003d03000000000000,GameSir G3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000ac0500005b05000000000000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000ac0500002d02000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000ac0500004d04000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows, -030000008f0e00001411000000000000,Gamo2 Divaller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000c9110000f055000000000000,GC100XF,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -03000000300f00000b01000000000000,GGE909 Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000f0250000c283000000000000,Gioteck PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000f0250000c383000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000f0250000c483000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000004f04000026b3000000000000,GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -0300000079000000d418000000000000,GPD Win,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c6240000025b000000000000,GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000007d0400000840000000000000,Gravis Destroyer Tilt,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows, -030000007d0400000540000000000000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -03000000280400000140000000000000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a3,dpup:-a4,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows, -03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00004900000000000000,Hatsune Miku Sho PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, -030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000d81400000862000000000000,HitBox Edition Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, -03000000632500002605000000000000,HJD X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -030000000d0f00000a00000000000000,Hori DOA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f00008500000000000000,Hori Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002500000000000000,Hori Fighting Commander 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00008400000000000000,Hori Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005100000000000000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00008600000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f0000ba00000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f00008800000000000000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, -030000000d0f00008700000000000000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00001000000000000000,Hori Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00003200000000000000,Hori Fightstick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000c000000000000000,Hori Fightstick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f00000d00000000000000,Hori Fightstick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000000d0f00003701000000000000,Hori Fightstick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows, -030000000d0f00004000000000000000,Hori Fightstick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002100000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002700000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000a000000000000000,Hori Grip TAC4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b13,x:b0,y:b3,platform:Windows, -030000000d0f0000a500000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000a600000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00000101000000000000,Hori Mini Hatsune Miku FT,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00003801000000000000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Windows, -030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002301000000000000,Hori PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -030000000d0f00001100000000000000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00002600000000000000,Hori Real Arcade Pro 3P,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00004b00000000000000,Hori Real Arcade Pro 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00008a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00008b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006f00000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00007000000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00003d00000000000000,Hori Real Arcade Pro N3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b4,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b6,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000ae00000000000000,Hori Real Arcade Pro N4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f00008c00000000000000,Hori Real Arcade Pro P4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f0000aa00000000000000,Hori Real Arcade Pro S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000d800000000000000,Hori Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, -030000000d0f00002200000000000000,Hori Real Arcade Pro V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005b00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005c00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000af00000000000000,Hori Real Arcade Pro VHS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00001b00000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000002f5000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b07,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b08,righttrigger:b11,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Windows, -030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000c900000000000000,Hori Taiko Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006400000000000000,Horipad 3TP,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00001300000000000000,Horipad 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006e00000000000000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006600000000000000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00004200000000000000,Horipad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000ad1b000001f5000000000000,Horipad EXT2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f0000ee00000000000000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows, -03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows, -03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows, -03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000d81d00001000000000000000,iBuffalo BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000005c0a00000285000000000000,iDroidCon,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b6,platform:Windows, -03000000696400006964000000000000,iDroidCon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -030000006f0e00002401000000000000,Injustice Fightstick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -03000000830500005130000000000000,InterAct ActionPad,a:b0,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -03000000ef0500000300000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, -03000000fd0500000230000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, -03000000fd0500000030000000000000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, -03000000fd0500003902000000000000,InterAct Hammerhead,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,rightshoulder:b7,rightstick:b5,righttrigger:b9,start:b10,x:b0,y:b1,platform:Windows, -03000000fd0500002a26000000000000,InterAct Hammerhead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, -03000000fd0500002f26000000000000,InterAct Hammerhead FX,a:b4,b:b5,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b1,y:b2,platform:Windows, -03000000fd0500005302000000000000,InterAct ProPad,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, -03000000ac0500002c02000000000000,Ipega Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000491900000204000000000000,Ipega PG9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000491900000304000000000000,Ipega PG9087,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows, -030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows, -030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, -03000000250900000017000000000000,Joypad Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows, -03000000bd12000003c0000000000000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ff1100004033000000000000,JPD FFB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a2,start:b15,x:b3,y:b0,platform:Windows, -03000000242f00002d00000000000000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000242f00008a00000000000000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, -03000000c4100000c082000000000000,KADE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000828200000180000000000000,Keio,a:b4,b:b5,back:b8,leftshoulder:b2,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b1,platform:Windows, -03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -03000000bd12000001e0000000000000,Leadership,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -030000006f0e00000103000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00000104000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000008f0e00001300000000000000,Logic3,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows, -030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006d04000019c2000000000000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006d0400001ac2000000000000,Logitech Precision,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000006d04000009c2000000000000,Logitech WingMan,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, -030000006d0400000bc2000000000000,Logitech WingMan Action Pad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows, -030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, -03000000380700005645000000000000,Lynx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000222200006000000000000000,Macally,a:b1,b:b2,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700003888000000000000,Mad Catz Arcade Fightstick TE S Plus PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008532000000000000,Mad Catz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700006352000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000380700005032000000000000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700005082000000000000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008031000000000000,Mad Catz FightStick Alpha PS3 ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000003807000038b7000000000000,Mad Catz Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, -03000000380700008433000000000000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008483000000000000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008134000000000000,Mad Catz Fightstick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008184000000000000,Mad Catz Fightstick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700006252000000000000,Mad Catz Micro CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008232000000000000,Mad Catz PlayStation Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008731000000000000,Mad Catz PlayStation Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000003807000056a8000000000000,Mad Catz PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700001888000000000000,Mad Catz SFIV Fightstick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000380700008081000000000000,Mad Catz SFV Arcade Fightstick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700001847000000000000,Mad Catz Street Fighter 4 Xbox 360 FightStick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, -03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, -030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows, -03000000790000003018000000000000,Mayflash F300 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -03000000242f00003900000000000000,Mayflash F300 Elite Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, -03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, -03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, -0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000008f0e00001030000000000000,Mayflash Sega Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows, -0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, -03000000790000000318000000000000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, -03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000790000002418000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows, -0300000079000000ae18000000000000,Mega Drive Controller,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -03000000c0160000990a000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,righttrigger:b2,start:b3,platform:Windows, -030000005e0400002800000000000000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Windows, -030000005e0400000300000000000000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, -030000005e0400000700000000000000,Microsoft SideWinder,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -030000005e0400000e00000000000000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, -030000005e0400002700000000000000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Windows, -03000000280d00000202000000000000,Miller Lite Cantroller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b5,x:b2,y:b3,platform:Windows, -03000000ad1b000023f0000000000000,MLG,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a6,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000ad1b00003ef0000000000000,MLG Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, -03000000380700006382000000000000,MLG PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ffff00000000000000000000,Mocute M053,a:b3,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b11,leftstick:b7,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b6,righttrigger:b4,rightx:a3,righty:a4,start:b8,x:b1,y:b0,platform:Windows, -03000000d6200000e589000000000000,Moga 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, -03000000d62000007162000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, -03000000d6200000ad0d000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c62400002a89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c62400002b89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c62400001a89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c62400001b89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000091200004488000000000000,MUSIA PlayStation 2 Input Display,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:b11,rightx:a2,righty:a3,start:b5,x:b1,y:b3,platform:Windows, -03000000f70600000100000000000000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Windows, -030000006b140000010c000000000000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000006b1400001106000000000000,Nacon Revolution 3 PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000006b140000100d000000000000,Nacon Revolution Infinity PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006b140000080d000000000000,Nacon Revolution Unlimited Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000bd12000001c0000000000000,Nebular,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000eb0300000000000000000000,NeGcon Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows, -0300000038070000efbe000000000000,NEO SE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -0300000092120000474e000000000000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Windows, -03000000921200004b46000000000000,NES 2 port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows, -03000000000f00000100000000000000,NES Controller,a:b1,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, -03000000921200004346000000000000,NES Controller,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, -03000000790000004518000000000000,NEXILUX GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows, -03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows, -03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows, -030000007e0500001920000000000000,NSO N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows, -030000007e0500001720000000000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Windows, -03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows, -03000000550900001072000000000000,NVIDIA Shield,a:b9,b:b8,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b3,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b2,righttrigger:a4,rightx:a2,righty:a5,start:b0,x:b7,y:b6,platform:Windows, -030000005509000000b4000000000000,NVIDIA Virtual,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000120c00000288000000000000,Nyko Air Flo Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000004b120000014d000000000000,Nyko Airflo,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows, -03000000d62000001d57000000000000,Nyko Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000791d00000900000000000000,Nyko Playpad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000782300000a10000000000000,Onlive Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows, -030000000d0f00000401000000000000,Onyx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000008916000001fd000000000000,Onza CE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a3,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, -03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows, -03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, -03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000006f0e00008501000000000000,PDP Fightpad Pro,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Windows, -030000006f0e00000901000000000000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -03000000e30500009605000000000000,PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000632500002306000000000000,PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, -03000000f0250000c183000000000000,PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000d9040000160f000000000000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -030000004c0500003713000000000000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -0300000062060000d570000000000000,PowerA PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000d620000013a7000000000000,PowerA Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d04000084ca000000000000,Precision,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000c62400001a53000000000000,Pro Ex Mini,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000110e000000000000,Pro5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000250900000088000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000250900006888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows, -030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000120a00000100000000000000,PS3 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000120c00001307000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f90e000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000250900000118000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000250900000218000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows, -030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows, -030000004f1f00000800000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, -03000000888800000804000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,leftshoulder:b10,leftstick:b1,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows, -030000008f0e00000300000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, -030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000ba2200002010000000000000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Windows, -03000000120c00000807000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000111e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000121e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000130e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000150e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000180e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000181e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000191e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c00001e0e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000a957000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000aa57000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f21c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f31c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f41c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f51c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120c0000f70e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000120e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000160e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000001a1e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, -030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, -03000000830500005020000000000000,PSX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Windows, -03000000300f00000111000000000000,Qanba 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00000211000000000000,Qanba 2P,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000300f00000011000000000000,Qanba Arcade Stick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows, -03000000300f00001611000000000000,Qanba Arcade Stick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, -03000000222c00000025000000000000,Qanba Dragon Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000222c00000020000000000000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00001211000000000000,Qanba Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00001210000000000000,Qanba Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, -03000000341a00000104000000000000,Qanba Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows, -03000000222c00000223000000000000,Qanba Obsidian Arcade Stick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000222c00000023000000000000,Qanba Obsidian Arcade Stick PS4,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000008a2400006682000000000000,R1 Mobile Controller,a:b3,b:b1,back:b7,leftx:a0,lefty:a1,start:b6,x:b4,y:b0,platform:Windows, -03000000086700006626000000000000,RadioShack,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, -03000000ff1100004733000000000000,Ramox FPS Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, -030000009b2800002300000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, -030000009b2800006900000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, -030000009b2800000800000000000000,Raphnet Dreamcast Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows, -030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, -030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, -030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows, -030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows, -030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows, -030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, -030000009b2800000500000000000000,Raphnet Saturn Adapter 2.0,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, -030000009b2800000300000000000000,Raphnet SNES Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, -030000009b2800005600000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, -030000009b2800005700000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, -030000009b2800001e00000000000000,Raphnet Vectrex Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows, -030000009b2800002b00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, -030000009b2800002c00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, -03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000321500000204000000000000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000104000000000000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000010000000000000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000321500000710000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000a10000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000410000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000910000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000011000000000000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000921200004547000000000000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b6,x:b3,y:b4,platform:Windows, -03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, -03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, -03000000bd12000013d0000000000000,Retrolink Sega Saturn Classic Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows, -03000000bd12000015d0000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, -0300000000f000000300000000000000,RetroUSB RetroPad,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, -0300000000f00000f100000000000000,RetroUSB Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, -03000000830500000960000000000000,Revenger,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b5,platform:Windows, -030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000006b140000020d000000000000,Revolution Pro Controller 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00001f01000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00004601000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c6240000fefa000000000000,Rock Candy Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00008701000000000000,Rock Candy Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -03000000050b0000181a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -03000000050b00001a1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -03000000050b00001c1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, -030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000a306000023f6000000000000,Saitek Cyborg V.1 Game,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows, -03000000a30600000cff000000000000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows, -03000000a30600000d5f000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows, -03000000a30600000dff000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b8,x:b0,y:b3,platform:Windows, -03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, -03000000a306000018f5000000000000,Saitek P3200,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00001001000000000000,Saitek P480 Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -03000000a30600000901000000000000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b5,rightx:a3,righty:a2,x:b0,y:b1,platform:Windows, -03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, -03000000a30600002106000000000000,Saitek PS1000 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000a306000020f6000000000000,Saitek PS2700 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, -03000000300f00001101000000000000,Saitek Rumble,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -03000000e804000000a0000000000000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000c01100000252000000000000,Sanwa Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -03000000c01100004350000000000000,Sanwa Micro Grip P3,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,x:b3,y:b2,platform:Windows, -03000000411200004550000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a1,righty:a2,start:b9,x:b1,y:b3,platform:Windows, -03000000c01100004150000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows, -03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, -03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows, -03000000c01100000051000000000000,Satechi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows, -03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, -0300000000050000289b000000000000,Sega Saturn Adapter,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, -0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows, -03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, -03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, -030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows, -03000000f82100001900000000000000,Shogun Bros Chameleon X1,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -0300000003040000c197000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, -0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows, -03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, -030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, -03000000921200004653000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, -03000000ff000000cb01000000000000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, -03000000341a00000208000000000000,Speedlink 6555,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows, -03000000341a00000908000000000000,Speedlink 6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000380700001722000000000000,Speedlink Competition Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,x:b2,y:b3,platform:Windows, -030000008f0e00000800000000000000,Speedlink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, -03000000de280000fc11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000de280000ff11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000120c0000160e000000000000,Steel Play Metaltech PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, -03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows, -03000000790000001c18000000000000,STK 7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000380700003847000000000000,Street Fighter Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, -030000001f08000001e4000000000000,Super Famicom Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, -03000000790000000418000000000000,Super Famicom Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, -03000000341200001300000000000000,Super Racer,a:b2,b:b3,back:b8,leftshoulder:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b7,x:b0,y:b1,platform:Windows, -03000000d620000011a7000000000000,Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000000d0f0000f600000000000000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows, -030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000e40a00000207000000000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows, -03000000d814000001a0000000000000,TE Kitty,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -03000000ba2200000701000000000000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b2,platform:Windows, -03000000c61100001000000000000000,Tencent Xianyou Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, -03000000790000002601000000000000,TGZ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, -030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -030000004f04000023b3000000000000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004f0400000ed0000000000000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004f04000008d0000000000000,ThrustMaster Ferrari 150 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows, -030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, -030000004f04000003d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000004f04000009d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -030000006d04000088ca000000000000,Thunderpad,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000666600000488000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -030000004f04000007d0000000000000,TMini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000571d00002100000000000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Windows, -03000000571d00002000000000000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, -03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000c01100000055000000000000,Tronsmart,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows, -03000000411200000450000000000000,Twin Shock,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows, -03000000d90400000200000000000000,TwinShock PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000151900005678000000000000,Uniplay U6,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b10,x:b3,y:b4,platform:Windows, -03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -030000000b0400003065000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, -03000000242f00006e00000000000000,USB Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows, -03000000300f00000701000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000341a00002308000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000666600000188000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -03000000666600000288000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, -030000006b1400000203000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000790000000a00000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, -03000000b404000081c6000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, -03000000b50700001503000000000000,USB Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows, -03000000bd12000012d0000000000000,USB Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, -03000000ff1100004133000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, -03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, -03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00000302000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -030000006f0e00000702000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, -0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows, -03000000120c0000ab57000000000000,Warrior Joypad JS083,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -030000007e0500003003000000000000,Wii U Pro,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b6,leftstick:b11,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b12,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, -0300000032150000030a000000000000,Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -0300000032150000140a000000000000,Wolverine,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000002e160000efbe000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, -03000000380700001647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000380700002045000000000000,Xbox 360 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, -03000000380700002644000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a5,start:b8,x:b2,y:b3,platform:Windows, -03000000380700002647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000003807000026b7000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000380700003647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a7,righty:a5,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400001907000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400009102000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000000fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000001fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b000016f0000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000ad1b00008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c62400000053000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c6240000fdfa000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000380700002847000000000000,Xbox 360 Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000a102000000000000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000120c00000a88000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000120c00001088000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2~,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5~,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000002a0600002000000000000000,Xbox Controller,a:b0,b:b1,back:b13,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b5,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b15,righttrigger:b7,rightx:a2,righty:a5,start:b12,x:b2,y:b3,platform:Windows, -03000000300f00008888000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:b13,dpleft:b10,dpright:b11,dpup:b12,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000380700001645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000380700002645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000380700003645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -03000000380700008645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400000202000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000005e0400008502000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400008702000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000005e0400008902000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b8,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b9,righttrigger:b4,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, -030000000d0f00006300000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e0400000c0b000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000ff02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -03000000450c00002043000000000000,Xeox SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, -030000006f0e00000300000000000000,XGear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, -03000000172700004431000000000000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, -03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, -030000007d0400000340000000000000,Xterminator Digital Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:-a4,lefttrigger:+a4,leftx:a0,lefty:a1,paddle1:b7,paddle2:b6,rightshoulder:b5,rightstick:b9,righttrigger:b2,rightx:a3,righty:a5,start:b8,x:b3,y:b4,platform:Windows, -03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, -03000000120c0000101e000000000000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, - -# Mac OS X -030000008f0e00000300000009010000,2 In 1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00000531000000020000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, -03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00001251000000010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00001151000000020000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000a30c00002400000006020000,8BitDo M30,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,guide:b9,leftshoulder:b6,lefttrigger:b5,rightshoulder:b4,righttrigger:b7,start:b8,x:b3,y:b0,platform:Mac OS X, -03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00005106000000010000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,lefttrigger:a5,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, -03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -030000003512000012ab000001000000,8BitDo NES30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000022000000090000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000190000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000660000000020000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000131000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000231000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000331000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000431000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Mac OS X, -03000000102800000900000000000000,8BitDo SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00004028000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000260000001000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000a00500003232000009010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X, -03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X, -03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, -03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, -03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000120c0000200e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000120c0000210e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000d8140000cecf000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X, -03000000a306000022f6000001030000,Cyborg V3 Rumble Pad PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000791d00000103000009010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -030000006e0500000720000010020000,Elecom JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Mac OS X, -030000006f0e00008401000003010000,Faceoff Premiere Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b4,paddle2:b5,paddle3:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Mac OS X, -03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, -03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006f0e00000102000000000000,GameStop Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000007d0400000540000001010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000280400000140000000020000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000008f0e00000300000007010000,GreenAsia Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X, -030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00005f00000000010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00005e00000000010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00008400000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00008500000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00008800000000010000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00008700000000010000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00004d00000000000000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00003801000008010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Mac OS X, -030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00006e00000000010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000000d0f0000ee00000000010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X, -03000000790000004e95000000010000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Mac OS X, -03000000830500006020000000000000,iBuffalo Gamepad,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X, -03000000ef0500000300000000020000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Mac OS X, -03000000fd0500000030000010010000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Mac OS X, -030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X, -030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000016c2000000000000,Logitech F310,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000006d04000018c2000000010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000380700005032000000010000,Mad Catz PS3 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000380700008433000000010000,Mad Catz PS3 Fightstick TE S+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000380700005082000000010000,Mad Catz PS4 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000380700008483000000010000,Mad Catz PS4 Fightstick TE S+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000790000004318000000010000,Mayflash GameCube Adapter,a:b4,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, -03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X, -0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X, -03000000790000000318000000010000,Mayflash Wii DolphinBar,a:b8,b:b12,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b44,leftshoulder:b16,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b4,platform:Mac OS X, -03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, -03000000790000000018000000010000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, -030000005e0400002800000002010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Mac OS X, -030000005e0400002700000001010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Mac OS X, -03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, -03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X, -030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000d620000011a7000000020000,Nintendo Switch Core Plus Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000d620000011a7000010050000,Nintendo Switch PowerA Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X, -030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X, -030000006f0e00000901000002010000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X, -030000004c050000da0c000000010000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -030000004c0500003713000000010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000100800000300000006010000,PS2 Adapter,a:b2,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, -030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, -030000004c0500006802000072050000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, -030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, -03000000222c00000225000000010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000222c00000020000000010000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000321500000204000000010000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000321500000010000000010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000321500000011000000010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, -030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, -0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -030000000d0f0000c100000072050000,Retro Bit Sega Genesis 6B Controller,a:b2,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b8,rightshoulder:b6,righttrigger:b7,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X, -03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000830500006020000000010000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Mac OS X, -03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000c6240000fefa000000000000,Rock Candy PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Mac OS X, -03000000a30c00002500000006020000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Mac OS X, -03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X, -03000000b40400000a01000000000000,Sega Saturn,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X, -030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, -0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X, -030000004c050000a00b000000000000,Sony DualShock 4 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, -030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, -03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, -03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, -05000000484944204465766963650000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, -050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, -050000004e696d6275732b008b000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, -05000000556e6b6e6f776e2048494400,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, -03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, -03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, -030000000d0f0000f600000000010000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, -03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X, -030000004f0400000ed0000000020000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X, -03000000571d00002100000021000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Mac OS X, -03000000bd12000015d0000000010000,Tomee Retro Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000bd12000015d0000000000000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000571d00002000000021000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, -030000005f140000c501000000020000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, -03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X, -030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, -050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X, -050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X, -030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000050b000003090000,Xbox Elite Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000130b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000200b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, -030000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000c62400003a54000000000000,Xbox One PowerA Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, -030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -030000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X, -03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, -03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, - -# Linux -030000005e0400008e02000020010000,8BitDo Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, -03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00001151000011010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,platform:Linux, -05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux, -03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, -03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000008000000210000011010000,8BitDo NES30,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, -05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, -03000000022000000090000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000190000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00002038000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000c82d00000660000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000131000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000231000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000331000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000431000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Linux, -05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00000061000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -030000003512000012ab000010010000,8BitDo SFC30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux, -030000003512000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -05000000102800000900000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00003028000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00001290000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c82d00000260000011010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -05000000202800000900000000010000,8BitDo SNES30,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -05000000a00500003232000001000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, -05000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, -03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, -050000005e040000e002000030110000,8BitDo Zero 2,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, -05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, -03000000c01100000355000011010000,Acrux Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00003901000013020000,Afterglow Prismatic Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00001302000000010000,Afterglow Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00003901000020060000,Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000100000008200000011010000,Akishop Customs PS360,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000007c1800000006000010010000,Alienware Dual Compatible Game PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux, -05000000491900000204000021000000,Amazon Fire Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, -05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, -03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, -03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, -05000000050b00000045000031000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, -05000000050b00000045000040000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, -03000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux, -03000000503200000110000011010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux, -05000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux, -05000000503200000110000044010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux, -05000000503200000110000046010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux, -03000000503200000210000000000000,Atari Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, -03000000503200000210000011010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, -05000000503200000210000000000000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, -05000000503200000210000045010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, -05000000503200000210000046010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, -05000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:-a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, -03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000c31100000791000011010000,Be1 GC101 Controller 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -05000000bc2000000055000001000000,BETOP AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000666600006706000000010000,Boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux, -03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux, -03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux, -03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, -03000000791d00000103000010010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000c11100000191000011010000,EasySMX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000242f00009100000000010000,EasySMX ESM-9101,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006e0500000320000010010000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, -030000006e0500000720000010010000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, -030000007d0400000640000010010000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Linux, -03000000430b00000300000000010000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000ac0500005b05000010010000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000558500001b06000010010000,GameSir G4 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000ac0500002d0200001b010000,GameSir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000bc2000005656000011010000,GameSir T4w,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000007d0400000540000000010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000280400000140000000010000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000008f0e00000610000000010000,GreenAsia Electronics Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux, -030000008f0e00001200000010010000,GreenAsia Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -06000000adde0000efbe000002010000,Hidromancer Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux, -03000000c9110000f055000011010000,HJC Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000632500002605000010010000,HJDX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -030000000d0f00000d00000000010000,Hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux, -030000000d0f00006d00000020010000,Hori EDGE 301,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:+a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000000d0f00005f00000011010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00005e00000011010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00005001000009040000,Hori Fighting Commander OCTA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000000d0f00008500000010010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00008600000002010000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -030000000d0f00008800000011010000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00008700000011010000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,rightstick:b11,righttrigger:a4,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00001000000011010000,Hori Fightstick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000ad1b000003f5000033050000,Hori Fightstick VX,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b8,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, -030000000d0f00004d00000011010000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000000d0f00003801000011010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Linux, -030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f0000aa00000011010000,Hori Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000000d0f00001100000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00002200000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00006a00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00006b00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00001600000000010000,Hori Real Arcade Pro EXSE,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, -030000000d0f00006e00000011010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00006600000011010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000000d0f0000c100000011010000,Horipad S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -050000000d0f0000f600000001000000,Horipad Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000341a000005f7000010010000,HuiJia GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux, -030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux, -03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, -050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, -03000000d80400008200000003000000,IMS PCU0,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux, -03000000120c00000500000010010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, -03000000ef0500000300000000010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, -03000000fd0500000030000000010000,InterAct GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Linux, -03000000fd0500002a26000000010000,InterAct HammerHead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, -0500000049190000020400001b010000,Ipega PG 9069,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000300f00001001000010010000,Jess Tech Dual Analog Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, -03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -03000000ba2200002010000001010000,Jess Technology Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, -050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, -030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, -050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, -03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000242f00002d00000011010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000242f00008a00000011010000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, -030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d040000d1ca000000000000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d0400001dc2000014400000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d0400001ec2000019200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d0400001ec2000020200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d04000019c2000011010000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d0400001fc2000005030000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux, -030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux, -05000000380700006652000025010000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700008532000010010000,Mad Catz Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -03000000380700005032000011010000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700005082000011010000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, -03000000380700008034000011010000,Mad Catz Fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700008084000011010000,Mad Catz Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000380700008433000011010000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700008483000011010000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000380700001888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700003888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000380700001647000010040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000380700003847000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -03000000790000004318000010010000,Mayflash GameCube Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -03000000242f00007300000011010000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, -0300000079000000d218000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000242f0000f700000001010000,Mayflash Magic S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -0300000025090000e803000001010000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, -03000000790000000318000011010000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, -03000000b50700001203000010010000,Mega World Logic 3 Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, -03000000780000000600000010010000,Microntek Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, -030000005e0400002800000000010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Linux, -030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux, -030000005e0400000700000000010000,Microsoft SideWinder Gamepad,a:b0,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux, -030000005e0400002700000000010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Linux, -030000005e0400008502000000010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, -030000005e0400008e02000001000000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.1,dpleft:h0.2,dpright:h0.8,dpup:h0.4,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000004010000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000056210000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000062230000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b00000b050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000d102000001010000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000d102000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -060000005e040000120b000009050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000dd02000003020000,Microsoft Xbox One 2015,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000e302000003020000,Microsoft Xbox One Elite,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000000b000008040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000050b000003090000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -030000005e040000ea02000008040000,Microsoft Xbox One S,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008902000021010000,Microsoft Xbox pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, -03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, -050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -050000004d4f435554452d3035305800,Mocute 054X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000d6200000e589000001000000,Moga 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, -05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, -05000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, -03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, -030000005e0400008e02000010020000,MSI GC20 V2,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006b1400000906000014010000,Nacon Asymmetric Wireless PS4 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -03000000853200000706000012010000,Nacon GC-100,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000004f1f00000800000011010000,NeoGeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -0300000092120000474e000000010000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Linux, -03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux, -060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, -030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux, -03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux, -060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, -060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, -050000004c69632050726f20436f6e00,Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b16,b:b15,back:b4,leftshoulder:b6,leftstick:b12,leftx:a1,lefty:a0~,rightshoulder:b8,start:b9,x:b14,y:b17,platform:Linux, -03000000d620000013a7000011010000,Nintendo Switch PowerA Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000d620000011a7000011010000,Nintendo Switch PowerA Core Plus Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000007e0500000920000011810000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, -050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -050000007e0500000920000001800000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, -050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux, -05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, -030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux, -050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux, -050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, -03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, -05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, -03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -19000000010000000100000001010000,odroidgo2 joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux, -19000000010000000200000011000000,odroidgo2 joypad v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux, -03000000c0160000dc27000001010000,OnyxSoft Dual JoyDivision,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:Linux, -05000000362800000100000002010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, -05000000362800000100000003010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, -05000000362800000100000004010000,OUYA Controller,a:b0,b:b3,back:b14,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,start:b16,x:b1,y:b2,platform:Linux, -03000000830500005020000010010000,Padix Rockfire PlayStation Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux, -03000000790000001c18000011010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000ff1100003133000010010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006f0e0000b802000001010000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e0000b802000013020000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e0000d702000006640000,PDP Black Camo Wired Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b13,dpup:b14,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00008001000011010000,PDP Faceoff Nintendo Switch Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00008501000011010000,PDP Nintendo Switch Fightpad Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006f0e00002801000011010000,PDP PS3 Rock Candy Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e00008701000011010000,PDP Rock Nintendo Switch Candy Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006f0e00000901000011010000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e0000a802000023020000,PDP Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -030000006f0e0000a702000023020000,PDP Xbox One Raven Black,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000004c050000da0c000011010000,PlayStation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, -03000000d9040000160f000000010000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -030000004c0500003713000011010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, -03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000000140000001010000,PowerA Fusion Pro 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c62400001a53000000010000,PowerA Mini Pro Ex,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000c62400001a58000001010000,PowerA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000000220000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, -03000000d62000000228000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c62400001a54000001010000,PowerA Xbox One Mini Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d62000000240000001010000,PowerA Xbox One Spectra Infinity,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, -03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -030000005f1400003102000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -050000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, -030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -03000000c01100000140000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -050000004c050000c405000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, -030000004c050000e60c000011810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, -050000004c050000e60c000000810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, -03000000300f00001211000011010000,Qanba Arcade Joystick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux, -03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000300f00001210000010010000,Qanba Joystick Plus,a:b0,b:b1,back:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,start:b9,x:b2,y:b3,platform:Linux, -03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000009b2800000300000001010000,Raphnet 4nes4snes,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, -030000009b2800004200000001010000,Raphnet Dual NES Adapter,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux, -030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, -030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, -030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000321500000104000011010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000321500000810000011010000,Razer Panthera PS4 Evo Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000321500000010000011010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000321500000011000011010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, -050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, -0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux, -0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux, -0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, -00000000526574726f53746f6e653200,RetroStone 2 Controller,a:b1,b:b0,back:b10,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Linux, -030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000a306000023f6000011010000,Saitek Cyborg V1 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, -03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux, -03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux, -03000000a30600000cff000010010000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux, -03000000a30600000c04000011010000,Saitek P2900,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux, -03000000a306000018f5000010010000,Saitek P3200 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, -03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, -03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux, -03000000a30600000b04000000010000,Saitek P990 Dual Analog,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux, -03000000a306000020f6000011010000,Saitek PS2700 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, -03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux, -03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux, -03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux, -03000000790000002201000011010000,Sega Saturn,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, -03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux, -030000001f08000001e4000010010000,SFC Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, -03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000f025000021c1000010010000,Shanwan Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000632500007505000010010000,Shanwan PS3 PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000bc2000000055000010010000,Shanwan PS3 PC ,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -050000004c050000cc09000001000000,Sony DualShock 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000ff000000cb01000010010000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, -03000000250900000500000000010000,Sony PS2 pad with SmartJoy Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, -030000005e0400008e02000073050000,Speedlink Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000de2800000112000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:+a5,dpleft:-a4,dpright:+a4,dpup:-a5,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, -03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, -03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, -03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, -03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b10,guide:b11,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Linux, -03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000ad1b000038f0000090040000,Street Fighter IV Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000003b07000004a1000000010000,Suncom SFX Plus,a:b0,b:b2,back:b7,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux, -03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, -0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, -030000008f0e00000d31000010010000,SZMY Power 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000008f0e00001431000010010000,SZMY Power PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Linux, -030000004f04000015b3000001010000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, -030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, -030000004f04000020b3000010010000,Thrustmaster Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, -030000004f04000023b3000000010000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004f0400000ed0000011010000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux, -030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux, -030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux, -030000004f04000004b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, -030000004f04000026b3000002040000,Thrustmaster GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c6240000025b000002020000,Thrustmaster GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000004f04000008d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -030000004f04000009d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000004f04000007d0000000010000,Thrustmaster T Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, -030000004f04000012b3000010010000,Thrustmaster Vibrating Gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, -03000000571d00002000000010010000,Tomee SNES Adapter,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, -03000000bd12000015d0000010010000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, -03000000d814000007cd000011010000,Toodles 2008 Chimp PC PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, -030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -030000005f140000c501000010010000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, -03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, -03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, -03000000790000001100000000010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux, -030000006f0e00000302000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -030000006f0e00000702000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, -05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, -0000000058626f782033363020576900,Xbox 360 Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, -030000005e0400001907000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000014010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400009102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000a102000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000a102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400008e02000000010000,Xbox 360 EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000a102000014010000,Xbox 360 Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400000202000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, -030000006f0e00001304000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000ffff0000ffff000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, -0000000058626f782047616d65706100,Xbox Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, -030000005e0400000a0b000005040000,Xbox One Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, -030000005e040000120b000009050000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000ea02000001030000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -060000005e040000120b000007050000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -060000005e040000ea0200000b050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b000005050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -050000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -050000005e040000130b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -030000005e040000120b000007050000,Xbox Series X Controller,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,misc1:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux, -050000005e040000130b000007050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, -03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, -05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux, -03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux, -xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, -03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, -03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, - -# Android -38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -36666264316630653965636634386234,8BitDo Adapter 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38426974446f20417263616465205374,8BitDo Arcade Stick,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b5,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -61393962646434393836356631636132,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, -64323139346131306233636562663738,8BitDo Arcade Stick,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, -64643565386136613265663236636564,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, -33313433353539306634656436353432,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38426974446f20446f67626f6e65204d,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, -34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android, -38393936616436383062666232653338,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f2038426974446f204c69,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -39356430616562366466646636643435,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000006500000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a5,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000051060000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android, -32323161363037623637326438643634,8BitDo M30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -33656266353630643966653238646264,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,start:b10,x:b19,y:b2,platform:Android, -38426974446f204d3330204d6f646b69,8BitDo M30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -39366630663062373237616566353437,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,start:b6,x:b2,y:b3,platform:Android, -64653533313537373934323436343563,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,start:b6,x:b2,y:b3,platform:Android, -66356438346136366337386437653934,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,start:b18,x:b19,y:b2,platform:Android, -66393064393162303732356665666366,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b2,y:b3,platform:Android, -33663431326134333366393233616633,8BitDo N30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, -38426974446f204e3330204d6f646b69,8BitDo N30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, -05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000065280000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -050000000220000000900000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38313433643131656262306631373166,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38326536643339353865323063616339,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38426974446f2050333020636c617373,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -35376664343164386333616535333434,8BitDo Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,start:b10,x:b19,y:b2,platform:Android, -38426974446f2038426974446f205072,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f2050726f203200000000,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -62373739366537363166326238653463,8BitDo Pro 2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b3,y:b2,platform:Android, -38386464613034326435626130396565,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f2038426974446f205265,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -66303230343038613365623964393766,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f20533330204d6f646b69,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -66316462353561376330346462316137,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974646f20534633302050726f00,8BitDo SF30 Pro,a:b1,b:b0,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b17,platform:Android, -61623334636338643233383735326439,8BitDo SFC30,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b31,start:b5,x:b30,y:b2,platform:Android, -05000000c82d000012900000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000062280000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -38316230613931613964356666353839,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f20534e3330204d6f646b,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -65323563303231646531383162646335,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -35383531346263653330306238353131,8BitDo SN30 PP,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -36653638656632326235346264663661,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, -38303232393133383836366330346462,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, -38346630346135363335366265656666,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38426974446f20534e33302050726f2b,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -536f6e7920436f6d707574657220456e,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -66306331643531333230306437353936,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000002600000ffff0f00,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -050000002028000009000000ffff3f00,8BitDo SNES30,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -050000003512000020ab000000780f00,8BitDo SNES30,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android, -33666663316164653937326237613331,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, -38426974646f205a65726f2047616d65,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, -05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -33663434393362303033616630346337,8BitDo Zero 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -34656330626361666438323266633963,8BitDo Zero 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, -63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, -32333634613735616163326165323731,Amazon Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, -417374726f2063697479206d696e6920,Astro City Mini,a:b23,b:b22,back:b29,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, -32303165626138343962363666346165,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -38383337343564366131323064613561,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -34313430343161653665353737323365,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, -4875694a6961204a432d573031550000,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, -30363230653635633863366338623265,Evo VR,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,x:b2,y:b3,platform:Android, -05000000b404000011240000dfff3f00,Flydigi Vader 2,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -34323662653333636330306631326233,Google Nexus,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -35383633353935396534393230616564,Google Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, -0500000031366332860c44aadfff0f00,GS Gamepad,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -66633030656131663837396562323935,Hori Battle,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, -35623466343433653739346434636330,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -484f524920434f2e2c4c54442e203130,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -484f524920434f2e2c4c544420205041,Hori Gem Pad 3,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, -65656436646661313232656661616130,Hori PC Engine Mini Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b18,platform:Android, -31303433326562636431653534636633,Hori Real Arcade Pro 3,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -30306539356238653637313730656134,HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, -0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,platform:Android, -64306137363261396266353433303531,InterAct GoPad,a:b24,b:b25,leftshoulder:b23,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,x:b21,y:b22,platform:Android, -532e542e442e20496e74657261637420,InterAct HammerHead FX,a:b23,b:b24,back:b30,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b22,lefttrigger:b28,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b25,righttrigger:b29,rightx:a2,righty:a3,start:b31,x:b20,y:b21,platform:Android, -65346535636333663931613264643164,Joy-Con,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b23,y:b24,platform:Android, -33346566643039343630376565326335,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, -35313531613435623366313835326238,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, -4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, -38383665633039363066383334653465,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -39363561613936303237333537383931,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, -64623163333561643339623235373232,Logitech F310,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -4c6f6769746563682047616d65706164,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -416d617a6f6e2047616d6520436f6e74,Luna Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, -4c756e612047616d6570616400000000,Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -31353762393935386662336365626334,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -39623565346366623931666633323530,Magic NS,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, -6d6179666c617368206c696d69746564,Mayflash GameCube Adapter,a:b22,b:b21,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a5,righty:a2,start:b30,x:b23,y:b24,platform:Android, -436f6e74726f6c6c6572000000000000,Mayflash N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, -65666330633838383061313633326461,Mayflash N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, -535a4d792d706f776572204c54442043,Mayflash Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b31,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, -30653962643666303631376438373532,Mayflash Wii DolphinBar,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, -484a5a204d6179666c61736820576969,Mayflash Wii DolphinBar,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, -31323564663862633234646330373138,Mega Drive,a:b23,b:b22,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, -37333564393261653735306132613061,Mega Drive,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, -64363363336633363736393038313464,Mega Drive,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Android, -33323763323132376537376266393366,Microsoft Dual Strike,a:b24,b:b23,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android, -30306461613834333439303734316539,Microsoft SideWinder Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b20,lefttrigger:b9,rightshoulder:b19,righttrigger:b10,start:b17,x:b2,y:b3,platform:Android, -32386235353630393033393135613831,Microsoft Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -4d4f435554452d303533582d4d35312d,Mocute 053X,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -33343361376163623438613466616531,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android, -050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android, -34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android, -36326533353166323965623661303933,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, -4e363420436f6e74726f6c6c65720000,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, -534e455320436f6e74726f6c6c657200,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -64623863346133633561626136366634,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, -050000005509000003720000cf7f3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005509000010720000ffff3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005509000014720000df7f3f00,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, -37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -39383335313438623439373538343266,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b16,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, -4f5559412047616d6520436f6e74726f,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b6,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, -506572666f726d616e63652044657369,PDP PS3 Rock Candy Controller,a:b1,b:b17,back:h0.2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, -62653335326261303663356263626339,PlayStation Classic Controller,a:b19,b:b1,back:b17,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b3,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android, -61653962353232366130326530363061,Pokken,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,rightshoulder:b20,righttrigger:b10,start:b18,x:b0,y:b2,platform:Android, -32666633663735353234363064386132,PS2,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a3,righty:a2,start:b30,x:b24,y:b21,platform:Android, -050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -536f6e7920504c415953544154494f4e,PS3 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -61363034663839376638653463633865,PS3 Controller,a:b0,b:b1,back:b15,dpdown:a14,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -66366539656564653432353139356536,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -66383132326164626636313737373037,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000004c050000c405000000783f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, -050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000004c050000cc090000fffe3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -30303839663330346632363232623138,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, -31326235383662333266633463653332,PS4 Controller,a:b1,b:b16,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android, -31373231336561636235613666323035,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -31663838336334393132303338353963,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -34613139376634626133336530386430,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, -37626233336235343937333961353732,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38393161636261653636653532386639,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -536f6e7920496e746572616374697665,PS4 Controller,a:b0,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -576972656c65737320436f6e74726f6c,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -63313733393535663339656564343962,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -63393662363836383439353064663939,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -65366465656364636137653363376531,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, -66613532303965383534396638613230,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, -050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, -32346465346533616263386539323932,PS5 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -32633532643734376632656664383733,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, -37363764353731323963323639666565,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, -61303162353165316365336436343139,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, -64336263393933626535303339616332,Qanba 4RAF,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, -36626666353861663864336130363137,Razer Junglecat,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, -5a6869587520526574726f2042697420,Retro Bit Saturn Controller,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b26,rightshoulder:b27,righttrigger:b28,start:b30,x:b23,y:b24,platform:Android, -32417865732031314b6579732047616d,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, -36313938306539326233393732613361,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, -526574726f466c616720576972656420,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,rightshoulder:b18,start:b10,x:b2,y:b3,platform:Android, -61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android, -38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b6,platform:Android, -33373336396634316434323337666361,RumblePad 2,a:b22,b:b23,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b24,platform:Android, -66386565396238363534313863353065,Sanwa PlayOnline Mobile,a:b21,b:b22,back:b23,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b24,platform:Android, -32383165316333383766336338373261,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, -37316565396364386635383230353365,Saturn,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, -38613865396530353338373763623431,Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b10,rightshoulder:b20,righttrigger:b19,start:b17,x:b2,y:b3,platform:Android, -61316232336262373631343137633631,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, -30353835333338613130373363646337,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, -66386262366536653765333235343634,SG H510,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, -66633132393363353531373465633064,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, -62653761636366393366613135366338,SN30 PP,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, -38376662666661636265313264613039,SNES,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, -5346432f555342205061640000000000,SNES Adapter,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, -5553422047616d657061642000000000,SNES Controller,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, -63303964303462366136616266653561,Sony PSP,a:b21,b:b22,back:b27,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b23,y:b24,platform:Android, -63376637643462343766333462383235,Sony Vita,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a3,righty:a4,start:b18,x:b0,y:b2,platform:Android, -476f6f676c65204c4c43205374616469,Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, -05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, -0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android, -35306436396437373135383665646464,SteelSeries Nimbus Plus,a:b0,b:b1,leftshoulder:b3,leftstick:b17,lefttrigger:b9,leftx:a0,rightshoulder:b20,rightstick:b18,righttrigger:b10,rightx:a2,x:b19,y:b2,platform:Android, -050000004f0400000ed00000fffe3f00,ThrustMaster eSwap Pro Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -5477696e20555342204a6f7973746963,Twin Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android, -30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -30386438313564306161393537333663,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, -33333034646336346339646538643633,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, -050000005e0400008e02000000783f00,Xbox 360 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -30396232393162346330326334636566,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -38313038323730383864666463383533,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -58626f782033363020576972656c6573,Xbox 360 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -65353331386662343338643939643636,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -65613532386633373963616462363038,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -47656e6572696320582d426f78207061,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -4d6963726f736f667420582d426f7820,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -64633436313965656664373634323364,Xbox Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005e04000091020000ff073f00,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, -050000005e040000e00200000ffe3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, -050000005e040000e0020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, -050000005e040000fd020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android, -35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, -050000005e040000e002000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005e040000ea02000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000005e040000120b000000783f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, -050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, -050000001727000044310000ffff3f00,XiaoMi Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, - -# iOS -05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, -05000000ac050000010000004f066d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, -05000000ac05000001000000cf076d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, -05000000ac05000001000000df076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, -05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, -4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS, -4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS, -050000007e050000062000004f060000,Nintendo Switch Joy-Con (L),+leftx:h0.1,+lefty:h0.2,-leftx:h0.4,-lefty:h0.8,dpdown:b2,dpleft:b0,dpright:b3,dpup:b1,leftshoulder:b4,misc1:b6,rightshoulder:b5,platform:iOS, -050000007e0500000e200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, -050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+rightx:h0.4,+righty:h0.8,-rightx:h0.1,-righty:h0.2,a:b1,b:b0,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b3,y:b2,platform:iOS, -050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000004c050000cc090000ff870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, -050000004c050000cc090000ff876d01,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000004c050000e60c0000df870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,touchpad:b10,x:b2,y:b3,platform:iOS, -050000004c050000e60c0000ff870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, -05000000ac0500000300000000006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, -05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, -05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, -05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, -050000005e040000050b0000df070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000050b0000ff070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000005e040000e0020000df070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000e0020000ff070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, -050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, -050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, diff --git a/src/builtin/lightmap/spot.png b/src/builtin/lightmap/spot.png deleted file mode 100644 index 0a48881..0000000 Binary files a/src/builtin/lightmap/spot.png and /dev/null differ diff --git a/src/builtin/organya-wavetable-doukutsu.bin b/src/builtin/organya-wavetable-doukutsu.bin deleted file mode 100644 index 3f68ac6..0000000 Binary files a/src/builtin/organya-wavetable-doukutsu.bin and /dev/null differ diff --git a/src/builtin/organya-wavetable-org.bin b/src/builtin/organya-wavetable-org.bin deleted file mode 100644 index 6bc97f5..0000000 Binary files a/src/builtin/organya-wavetable-org.bin and /dev/null differ diff --git a/src/builtin/touch.png b/src/builtin/touch.png deleted file mode 100644 index 685c7dd..0000000 Binary files a/src/builtin/touch.png and /dev/null differ diff --git a/src/builtin_fs.rs b/src/builtin_fs.rs deleted file mode 100644 index 133963f..0000000 --- a/src/builtin_fs.rs +++ /dev/null @@ -1,330 +0,0 @@ -use std::fmt::Debug; -use std::io::Cursor; -use std::io::ErrorKind; -use std::io::SeekFrom; -use std::path::{Component, Path, PathBuf}; -use std::{fmt, io}; - -use crate::framework::error::GameError::FilesystemError; -use crate::framework::error::GameResult; -use crate::framework::vfs::{OpenOptions, VFile, VMetadata, VFS}; - -#[derive(Debug)] -pub struct BuiltinFile(Cursor<&'static [u8]>); - -impl BuiltinFile { - pub fn from(buf: &'static [u8]) -> Box { - Box::new(BuiltinFile(Cursor::new(buf))) - } -} - -impl io::Read for BuiltinFile { - fn read(&mut self, buf: &mut [u8]) -> io::Result { - self.0.read(buf) - } -} - -impl io::Seek for BuiltinFile { - fn seek(&mut self, pos: SeekFrom) -> io::Result { - self.0.seek(pos) - } -} - -impl io::Write for BuiltinFile { - fn write(&mut self, _buf: &[u8]) -> io::Result { - Err(io::Error::new(ErrorKind::PermissionDenied, "Built-in file system is read-only.")) - } - - fn flush(&mut self) -> io::Result<()> { - Err(io::Error::new(ErrorKind::PermissionDenied, "Built-in file system is read-only.")) - } -} - -struct BuiltinMetadata { - is_dir: bool, - size: u64, -} - -impl VMetadata for BuiltinMetadata { - fn is_dir(&self) -> bool { - self.is_dir - } - - fn is_file(&self) -> bool { - !self.is_dir - } - - fn len(&self) -> u64 { - self.size - } -} - -#[derive(Clone, Debug)] -enum FSNode { - File(&'static str, &'static [u8]), - Directory(&'static str, Vec), -} - -impl FSNode { - fn get_name(&self) -> &'static str { - match self { - FSNode::File(name, _) => name, - FSNode::Directory(name, _) => name, - } - } - - fn to_file(&self) -> GameResult> { - match self { - FSNode::File(_, buf) => Ok(BuiltinFile::from(buf)), - FSNode::Directory(name, _) => Err(FilesystemError(format!("{} is a directory.", name))), - } - } - - fn to_metadata(&self) -> Box { - match self { - FSNode::File(_, buf) => Box::new(BuiltinMetadata { is_dir: false, size: buf.len() as u64 }), - FSNode::Directory(_, _) => Box::new(BuiltinMetadata { is_dir: true, size: 0 }), - } - } -} - -pub struct BuiltinFS { - root: Vec, -} - -impl BuiltinFS { - pub fn new() -> Self { - Self { - root: vec![FSNode::Directory( - "builtin", - vec![ - FSNode::File("builtin_font.fnt", include_bytes!("builtin/builtin_font.fnt")), - FSNode::File("builtin_font_0.png", include_bytes!("builtin/builtin_font_0.png")), - FSNode::File("builtin_font_1.png", include_bytes!("builtin/builtin_font_1.png")), - FSNode::File("gamecontrollerdb.txt", include_bytes!("builtin/gamecontrollerdb.txt")), - FSNode::File( - "organya-wavetable-doukutsu.bin", - include_bytes!("builtin/organya-wavetable-doukutsu.bin"), - ), - FSNode::File("touch.png", include_bytes!("builtin/touch.png")), - FSNode::Directory( - "builtin_data", - vec![ - FSNode::File("buttons.png", include_bytes!("builtin/builtin_data/buttons.png")), - FSNode::File("triangles.png", include_bytes!("builtin/builtin_data/triangles.png")), - FSNode::Directory( - "headband", - vec![ - FSNode::Directory( - "ogph", - vec![ - FSNode::File( - "Casts.png", - include_bytes!("builtin/builtin_data/headband/ogph/Casts.png"), - ), - FSNode::Directory( - "Npc", - vec![ - FSNode::File( - "NpcGuest.png", - include_bytes!( - "builtin/builtin_data/headband/ogph/Npc/NpcGuest.png" - ), - ), - FSNode::File( - "NpcMiza.png", - include_bytes!( - "builtin/builtin_data/headband/ogph/Npc/NpcMiza.png" - ), - ), - FSNode::File( - "NpcRegu.png", - include_bytes!( - "builtin/builtin_data/headband/ogph/Npc/NpcRegu.png" - ), - ), - ], - ), - ], - ), - FSNode::Directory( - "plus", - vec![ - FSNode::File( - "Casts.png", - include_bytes!("builtin/builtin_data/headband/plus/casts.png"), - ), - FSNode::Directory( - "Npc", - vec![ - FSNode::File( - "NpcGuest.png", - include_bytes!( - "builtin/builtin_data/headband/plus/npc/npcguest.png" - ), - ), - FSNode::File( - "NpcMiza.png", - include_bytes!( - "builtin/builtin_data/headband/plus/npc/npcmiza.png" - ), - ), - FSNode::File( - "NpcRegu.png", - include_bytes!( - "builtin/builtin_data/headband/plus/npc/npcregu.png" - ), - ), - ], - ), - ], - ), - ], - ), - FSNode::Directory( - "locale", - vec![ - FSNode::File("en.json", include_bytes!("builtin/builtin_data/locale/en.json")), - FSNode::File("jp.json", include_bytes!("builtin/builtin_data/locale/jp.json")), - ], - ), - ], - ), - FSNode::Directory( - "shaders", - vec![ - // FSNode::File("basic_150.vert.glsl", include_bytes!("builtin/shaders/basic_150.vert.glsl")), - // FSNode::File("water_150.frag.glsl", include_bytes!("builtin/shaders/water_150.frag.glsl")), - // FSNode::File("basic_es300.vert.glsl", include_bytes!("builtin/shaders/basic_es300.vert.glsl")), - // FSNode::File("water_es300.frag.glsl", include_bytes!("builtin/shaders/water_es300.frag.glsl")), - ], - ), - FSNode::Directory( - "lightmap", - vec![FSNode::File("spot.png", include_bytes!("builtin/lightmap/spot.png"))], - ), - ], - )], - } - } - - fn get_node(&self, path: &Path) -> GameResult { - let mut iter = path.components().peekable(); - - if let Some(Component::RootDir) = iter.next() { - let mut curr_dir = &self.root; - - if iter.peek().is_none() { - return Ok(FSNode::Directory("", self.root.clone())); - } - - while let Some(comp) = iter.next() { - let comp_name = comp.as_os_str().to_string_lossy(); - - for file in curr_dir { - match file { - FSNode::File(name, _) if comp_name.eq(name) => { - return if iter.peek().is_some() { - Err(FilesystemError(format!("Expected a directory, found a file: {:?}", path))) - } else { - Ok(file.clone()) - }; - } - FSNode::Directory(name, contents) if comp_name.eq(name) => { - if iter.peek().is_some() { - curr_dir = contents; - break; - } else { - return Ok(file.clone()); - } - } - _ => {} - } - } - } - } else { - return Err(FilesystemError("Path must be absolute.".to_string())); - } - - Err(FilesystemError("File not found.".to_string())) - } -} - -impl Debug for BuiltinFS { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - write!(f, "") - } -} - -impl VFS for BuiltinFS { - fn open_options(&self, path: &Path, open_options: OpenOptions) -> GameResult> { - if open_options.write || open_options.create || open_options.append || open_options.truncate { - let msg = format!("Cannot alter file {:?} in root {:?}, filesystem read-only", path, self); - return Err(FilesystemError(msg)); - } - - self.get_node(path)?.to_file() - } - - fn mkdir(&self, _path: &Path) -> GameResult<()> { - Err(FilesystemError("Tried to make directory {} but FS is read-only".to_string())) - } - - fn rm(&self, _path: &Path) -> GameResult<()> { - Err(FilesystemError("Tried to remove file {} but FS is read-only".to_string())) - } - - fn rmrf(&self, _path: &Path) -> GameResult<()> { - Err(FilesystemError("Tried to remove file/dir {} but FS is read-only".to_string())) - } - - fn exists(&self, path: &Path) -> bool { - self.get_node(path).is_ok() - } - - fn metadata(&self, path: &Path) -> GameResult> { - self.get_node(path).map(|v| v.to_metadata()) - } - - fn read_dir(&self, path: &Path) -> GameResult>>> { - match self.get_node(path) { - Ok(FSNode::Directory(_, contents)) => { - let mut vec = Vec::new(); - for node in contents { - vec.push(Ok(PathBuf::from(node.get_name()))) - } - - Ok(Box::new(vec.into_iter())) - } - Ok(FSNode::File(_, _)) => Err(FilesystemError(format!("Expected a directory, found a file: {:?}", path))), - Err(e) => Err(e), - } - } - - fn to_path_buf(&self) -> Option { - None - } -} - -#[test] -fn test_builtin_fs() { - let fs = BuiltinFS { - root: vec![ - FSNode::File("test.txt", &[]), - FSNode::Directory( - "memes", - vec![ - FSNode::File("nothing.txt", &[]), - FSNode::Directory("secret stuff", vec![FSNode::File("passwords.txt", b"12345678")]), - ], - ), - FSNode::File("test2.txt", &[]), - ], - }; - - println!("{:?}", fs.get_node(Path::new("/")).unwrap()); - println!("{:?}", fs.get_node(Path::new("/test.txt")).unwrap()); - println!("{:?}", fs.get_node(Path::new("/memes")).unwrap()); - println!("{:?}", fs.get_node(Path::new("/memes/nothing.txt")).unwrap()); - println!("{:?}", fs.get_node(Path::new("/memes/secret stuff/passwords.txt")).unwrap()); -} diff --git a/src/common.rs b/src/common.rs index b4d3663..ccc20d9 100644 --- a/src/common.rs +++ b/src/common.rs @@ -3,12 +3,12 @@ use std::time::{SystemTime, UNIX_EPOCH}; use lazy_static::lazy_static; use num_traits::{abs, Num}; +use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use serde::de::{SeqAccess, Visitor}; use serde::ser::SerializeTupleStruct; -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use crate::bitfield; -use crate::texture_set::G_MAG; +use crate::graphics::texture_set::G_MAG; /// Multiply cave story degrees (0-255, which corresponds to 0°-360°) with this constant to get /// respective value in radians. @@ -302,8 +302,8 @@ impl Rect { impl Serialize for Rect { fn serialize(&self, serializer: S) -> Result - where - S: Serializer, + where + S: Serializer, { let mut state = serializer.serialize_tuple_struct("Rect", 4)?; state.serialize_field(&self.left)?; diff --git a/src/components/background.rs b/src/components/background.rs index f1a615c..369137e 100644 --- a/src/components/background.rs +++ b/src/components/background.rs @@ -1,7 +1,10 @@ use crate::common::{Color, Rect}; -use crate::frame::Frame; -use crate::stage::{BackgroundType, Stage, StageTexturePaths}; -use crate::{graphics, Context, GameResult, SharedGameState}; +use crate::framework::context::Context; +use crate::framework::error::GameResult; +use crate::framework::graphics; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::{BackgroundType, Stage, StageTexturePaths}; pub struct Background { pub tick: usize, diff --git a/src/components/boss_life_bar.rs b/src/components/boss_life_bar.rs index 62d9e7f..3b48a5f 100644 --- a/src/components/boss_life_bar.rs +++ b/src/components/boss_life_bar.rs @@ -1,11 +1,11 @@ use crate::common::Rect; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u8)] diff --git a/src/components/credits.rs b/src/components/credits.rs index f7e65ff..49775ac 100644 --- a/src/components/credits.rs +++ b/src/components/credits.rs @@ -1,11 +1,11 @@ use crate::common::{Color, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics; -use crate::scripting::tsc::text_script::IllustrationState; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::scripting::tsc::text_script::IllustrationState; pub struct Credits {} diff --git a/src/components/draw_common.rs b/src/components/draw_common.rs index 6ca51f1..161bab7 100644 --- a/src/components/draw_common.rs +++ b/src/components/draw_common.rs @@ -1,7 +1,7 @@ use crate::common::Rect; -use crate::shared_game_state::SharedGameState; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; #[derive(Debug, EnumIter, PartialEq, Eq, Hash, Copy, Clone)] pub enum Alignment { diff --git a/src/components/fade.rs b/src/components/fade.rs index e3acb4e..e47c999 100644 --- a/src/components/fade.rs +++ b/src/components/fade.rs @@ -1,9 +1,9 @@ use crate::common::{FadeDirection, FadeState, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; pub struct Fade; diff --git a/src/components/falling_island.rs b/src/components/falling_island.rs index 3bbf8c9..3b690db 100644 --- a/src/components/falling_island.rs +++ b/src/components/falling_island.rs @@ -2,12 +2,12 @@ use std::ops::Deref; use crate::common::{Color, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::graphics; -use crate::scripting::tsc::text_script::TextScriptExecutionState; -use crate::shared_game_state::SharedGameState; +use crate::framework::graphics; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::scripting::tsc::text_script::TextScriptExecutionState; pub struct FallingIsland {} diff --git a/src/components/flash.rs b/src/components/flash.rs index 363d78c..e2d45de 100644 --- a/src/components/flash.rs +++ b/src/components/flash.rs @@ -1,10 +1,10 @@ use crate::common::{Color, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; pub enum FlashState { None, @@ -83,7 +83,7 @@ impl GameEntity<()> for Flash { left: 0, top: ((cen_y - width) * state.scale) as isize, right: (state.canvas_size.0 * state.scale) as isize, - bottom: ((cen_y + width) * state.scale) as isize + bottom: ((cen_y + width) * state.scale) as isize, }; graphics::draw_rect(ctx, rect, WHITE)?; @@ -93,7 +93,7 @@ impl GameEntity<()> for Flash { left: ((cen_x - width) * state.scale) as isize, top: 0, right: ((cen_x + width) * state.scale) as isize, - bottom: (state.canvas_size.1 * state.scale) as isize + bottom: (state.canvas_size.1 * state.scale) as isize, }; graphics::draw_rect(ctx, rect, WHITE)?; diff --git a/src/components/hud.rs b/src/components/hud.rs index c1df946..e167bc3 100644 --- a/src/components/hud.rs +++ b/src/components/hud.rs @@ -1,14 +1,14 @@ use crate::common::Rect; -use crate::components::draw_common::{draw_number, Alignment}; +use crate::components::draw_common::{Alignment, draw_number}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics::screen_insets_scaled; -use crate::inventory::Inventory; -use crate::player::Player; -use crate::shared_game_state::SharedGameState; -use crate::weapon::WeaponType; +use crate::game::frame::Frame; +use crate::game::inventory::Inventory; +use crate::game::shared_game_state::SharedGameState; +use crate::game::player::Player; +use crate::game::weapon::WeaponType; pub struct HUD { pub alignment: Alignment, diff --git a/src/components/inventory.rs b/src/components/inventory.rs index 0870633..b0c1b07 100644 --- a/src/components/inventory.rs +++ b/src/components/inventory.rs @@ -1,16 +1,16 @@ use crate::common::Rect; -use crate::components::draw_common::{draw_number, Alignment}; +use crate::components::draw_common::{Alignment, draw_number}; use crate::components::hud::HUD; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::frame::Frame; +use crate::game::inventory::Inventory; +use crate::game::shared_game_state::SharedGameState; use crate::input::touch_controls::TouchControlType; -use crate::inventory::Inventory; -use crate::player::Player; -use crate::scripting::tsc::text_script::{ScriptMode, TextScriptExecutionState}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::{WeaponLevel, WeaponType}; +use crate::game::player::Player; +use crate::game::scripting::tsc::text_script::{ScriptMode, TextScriptExecutionState}; +use crate::game::weapon::{WeaponLevel, WeaponType}; #[derive(Copy, Clone, PartialEq, Eq)] #[repr(u8)] @@ -91,9 +91,9 @@ impl GameEntity<(&mut Context, &mut Player, &mut Inventory, &mut HUD)> for Inven if state.control_flags.control_enabled() && (player.controller.trigger_inventory() - || player.controller.trigger_menu_back() - || (player.controller.trigger_menu_ok() && self.focus == InventoryFocus::Weapons) - || (state.settings.touch_controls && state.touch_controls.consume_click_in(slot_rect))) + || player.controller.trigger_menu_back() + || (player.controller.trigger_menu_ok() && self.focus == InventoryFocus::Weapons) + || (state.settings.touch_controls && state.touch_controls.consume_click_in(slot_rect))) { state.control_flags.set_ok_button_disabled(false); self.exit(state, player, inventory, hud); diff --git a/src/components/map_system.rs b/src/components/map_system.rs index ef53ef2..5dcd93b 100644 --- a/src/components/map_system.rs +++ b/src/components/map_system.rs @@ -4,12 +4,12 @@ use crate::common::{Color, Rect}; use crate::framework::backend::{BackendTexture, SpriteBatchCommand}; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::graphics; +use crate::framework::graphics; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; use crate::input::touch_controls::TouchControlType; -use crate::player::Player; -use crate::scripting::tsc::text_script::TextScriptExecutionState; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::player::Player; +use crate::game::scripting::tsc::text_script::TextScriptExecutionState; #[derive(Copy, Clone, Eq, PartialEq)] pub enum MapSystemState { diff --git a/src/components/nikumaru.rs b/src/components/nikumaru.rs index d4adb09..5604cd0 100644 --- a/src/components/nikumaru.rs +++ b/src/components/nikumaru.rs @@ -1,17 +1,17 @@ -use byteorder::{ReadBytesExt, WriteBytesExt, LE}; +use byteorder::{LE, ReadBytesExt, WriteBytesExt}; use crate::common::Rect; -use crate::components::draw_common::{draw_number, draw_number_zeros, Alignment}; +use crate::components::draw_common::{Alignment, draw_number, draw_number_zeros}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem; use crate::framework::vfs::OpenOptions; -use crate::player::Player; -use crate::rng::RNG; -use crate::scripting::tsc::text_script::TextScriptExecutionState; -use crate::shared_game_state::{SharedGameState, TimingMode}; +use crate::game::frame::Frame; +use crate::game::shared_game_state::{SharedGameState, TimingMode}; +use crate::game::player::Player; +use crate::game::scripting::tsc::text_script::TextScriptExecutionState; +use crate::util::rng::RNG; #[derive(Clone, Copy)] pub struct NikumaruCounter { diff --git a/src/components/number_popup.rs b/src/components/number_popup.rs index 001bfa8..9ab5626 100644 --- a/src/components/number_popup.rs +++ b/src/components/number_popup.rs @@ -1,9 +1,9 @@ use crate::common::{interpolate_fix9_scale, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; #[derive(Debug, Copy, Clone)] pub struct NumberPopup { diff --git a/src/components/replay.rs b/src/components/replay.rs index e13d8fd..9d30e5d 100644 --- a/src/components/replay.rs +++ b/src/components/replay.rs @@ -1,17 +1,17 @@ use std::io::{Cursor, Read}; -use byteorder::{ReadBytesExt, WriteBytesExt, LE}; +use byteorder::{LE, ReadBytesExt, WriteBytesExt}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem; use crate::framework::keyboard::ScanCode; use crate::framework::vfs::OpenOptions; +use crate::game::frame::Frame; +use crate::game::shared_game_state::{ReplayKind, ReplayState, SharedGameState}; use crate::input::replay_player_controller::{KeyState, ReplayController}; -use crate::player::Player; -use crate::shared_game_state::{ReplayKind, ReplayState, SharedGameState}; +use crate::game::player::Player; #[derive(Clone)] pub struct Replay { diff --git a/src/components/stage_select.rs b/src/components/stage_select.rs index 8320382..cf72294 100644 --- a/src/components/stage_select.rs +++ b/src/components/stage_select.rs @@ -1,13 +1,12 @@ -use crate::framework::context::Context; -use crate::framework::error::GameResult; - use crate::common::Rect; use crate::entity::GameEntity; -use crate::frame::Frame; +use crate::framework::context::Context; +use crate::framework::error::GameResult; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; use crate::input::touch_controls::TouchControlType; -use crate::player::Player; -use crate::shared_game_state::SharedGameState; -use crate::scripting::tsc::text_script::ScriptMode; +use crate::game::player::Player; +use crate::game::scripting::tsc::text_script::ScriptMode; pub struct StageSelect { pub current_teleport_slot: u8, diff --git a/src/components/text_boxes.rs b/src/components/text_boxes.rs index 6d532f6..7093eab 100644 --- a/src/components/text_boxes.rs +++ b/src/components/text_boxes.rs @@ -1,13 +1,12 @@ use crate::common::{Color, Rect}; use crate::engine_constants::AnimatedFace; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::graphics; -use crate::graphics::draw_rect; -use crate::scripting::tsc::text_script::{ConfirmSelection, TextScriptExecutionState, TextScriptLine}; -use crate::shared_game_state::SharedGameState; +use crate::framework::graphics; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::scripting::tsc::text_script::{ConfirmSelection, TextScriptExecutionState, TextScriptLine}; pub struct TextBoxes { pub slide_in: u8, @@ -284,7 +283,7 @@ impl GameEntity<()> for TextBoxes { }; x += left_pos + text_offset + 14.0; - draw_rect( + graphics::draw_rect( ctx, Rect::new_size( (x * state.scale) as isize, diff --git a/src/components/tilemap.rs b/src/components/tilemap.rs index 5c727eb..b81df41 100644 --- a/src/components/tilemap.rs +++ b/src/components/tilemap.rs @@ -1,9 +1,9 @@ use crate::common::Rect; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::shared_game_state::{SharedGameState, TileSize}; -use crate::stage::{BackgroundType, Stage, StageTexturePaths}; +use crate::game::frame::Frame; +use crate::game::shared_game_state::{SharedGameState, TileSize}; +use crate::game::stage::{BackgroundType, Stage, StageTexturePaths}; pub struct Tilemap { tick: u32, diff --git a/src/components/water_renderer.rs b/src/components/water_renderer.rs index edf8cea..be2da69 100644 --- a/src/components/water_renderer.rs +++ b/src/components/water_renderer.rs @@ -1,18 +1,18 @@ use std::cell::RefCell; use crate::common::{Color, Rect}; -use crate::frame::Frame; use crate::framework::backend::{BackendShader, SpriteBatchCommand, VertexData}; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics; -use crate::graphics::BlendMode; -use crate::map::{WaterParamEntry, WaterParams, WaterRegionType}; -use crate::npc::list::NPCList; -use crate::physics::PhysicalEntity; -use crate::player::Player; -use crate::shared_game_state::SharedGameState; -use crate::stage::{BackgroundType, Stage}; +use crate::framework::graphics::BlendMode; +use crate::game::frame::Frame; +use crate::game::map::{WaterParamEntry, WaterParams, WaterRegionType}; +use crate::game::physics::PhysicalEntity; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::{BackgroundType, Stage}; +use crate::game::npc::list::NPCList; +use crate::game::player::Player; const TENSION: f32 = 0.03; const DAMPENING: f32 = 0.01; diff --git a/src/components/whimsical_star.rs b/src/components/whimsical_star.rs index ca16b8f..7a836a8 100644 --- a/src/components/whimsical_star.rs +++ b/src/components/whimsical_star.rs @@ -1,11 +1,11 @@ -use crate::common::{interpolate_fix9_scale, Direction, Rect}; +use crate::common::{Direction, interpolate_fix9_scale, Rect}; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::{Bullet, BulletManager}; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::weapon::bullet::{Bullet, BulletManager}; pub struct WhimsicalStar { pub star: [Star; 3], diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 0520c5b..9a02060 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -4,12 +4,12 @@ use std::rc::Rc; use imgui::{Image, MouseButton, Window, WindowFlags}; +use crate::{Context, GameResult, graphics, I_MAG, SharedGameState}; use crate::common::{Color, Rect}; use crate::components::background::Background; use crate::components::tilemap::{TileLayer, Tilemap}; -use crate::frame::Frame; -use crate::stage::{Stage, StageTexturePaths}; -use crate::{graphics, Context, GameResult, SharedGameState, I_MAG}; +use crate::game::frame::Frame; +use crate::game::stage::{Stage, StageTexturePaths}; #[derive(Copy, Clone, Eq, PartialEq)] pub enum CurrentTool { diff --git a/src/engine_constants/mod.rs b/src/engine_constants/mod.rs index 2b1085b..3292517 100644 --- a/src/engine_constants/mod.rs +++ b/src/engine_constants/mod.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::io::{BufRead, BufReader, Cursor, Read}; -use byteorder::{ReadBytesExt, LE}; +use byteorder::{LE, ReadBytesExt}; use case_insensitive_hashmap::CaseInsensitiveHashMap; use xmltree::Element; @@ -12,11 +12,11 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem; use crate::framework::gamepad::{Axis, Button}; +use crate::game::settings::Settings; +use crate::game::shared_game_state::{FontData, Season}; use crate::i18n::Locale; -use crate::player::ControlMode; -use crate::scripting::tsc::text_script::TextScriptEncoding; -use crate::settings::Settings; -use crate::shared_game_state::{FontData, Season}; +use crate::game::player::ControlMode; +use crate::game::scripting::tsc::text_script::TextScriptEncoding; use crate::sound::pixtone::{Channel, Envelope, PixToneParameters, Waveform}; use crate::sound::SoundManager; diff --git a/src/engine_constants/npcs.rs b/src/engine_constants/npcs.rs index 00bb481..aeff306 100644 --- a/src/engine_constants/npcs.rs +++ b/src/engine_constants/npcs.rs @@ -2,8 +2,8 @@ use std::fmt::Debug; use std::marker::PhantomData; use std::ops::Index; -use serde::de::{Error, SeqAccess, Visitor}; use serde::{Deserialize, Deserializer, Serialize}; +use serde::de::{Error, SeqAccess, Visitor}; use crate::common::Rect; use crate::macros::fmt::Formatter; @@ -14,8 +14,8 @@ pub struct SafeNPCRect(pub [Rect; T]); impl Serialize for SafeNPCRect { #[inline] fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, + where + S: serde::Serializer, { self.0.serialize(serializer) } @@ -31,8 +31,8 @@ impl<'de, const T: usize> Visitor<'de> for SafeNPCRectArrayVisitor { } fn visit_seq(self, mut seq: A) -> Result - where - A: SeqAccess<'de>, + where + A: SeqAccess<'de>, { let mut rects = [Rect::default(); T]; for (i, rect) in rects.iter_mut().enumerate() { @@ -46,8 +46,8 @@ impl<'de, const T: usize> Visitor<'de> for SafeNPCRectArrayVisitor { impl<'de, const T: usize> Deserialize<'de> for SafeNPCRect { fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, + where + D: Deserializer<'de>, { deserializer.deserialize_seq(SafeNPCRectArrayVisitor(PhantomData)).map(SafeNPCRect) } diff --git a/src/entity.rs b/src/entity.rs index c4e37a5..7d91d34 100644 --- a/src/entity.rs +++ b/src/entity.rs @@ -1,8 +1,8 @@ use crate::common::interpolate_fix9_scale; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::shared_game_state::SharedGameState; +use crate::game::frame::Frame; +use crate::game::shared_game_state::SharedGameState; pub trait GameEntity { fn tick(&mut self, state: &mut SharedGameState, custom: C) -> GameResult; diff --git a/src/exe_parser.rs b/src/exe_parser.rs deleted file mode 100644 index 0ac2668..0000000 --- a/src/exe_parser.rs +++ /dev/null @@ -1,127 +0,0 @@ -use std::ops::Range; - -use pelite::{ - image::RT_BITMAP, - pe32::{headers::SectionHeaders, Pe, PeFile}, - resources::{Directory, Entry, Name, Resources}, -}; - -use crate::framework::error::{GameError::ParseError, GameResult}; - -#[derive(Debug)] -pub struct DataFile { - pub bytes: Vec, - pub name: String, -} - -impl DataFile { - pub fn from(name: String, bytes: Vec) -> Self { - Self { name, bytes } - } -} - -#[derive(Debug)] -pub struct ExeResourceDirectory { - pub name: String, - pub data_files: Vec, -} - -impl ExeResourceDirectory { - pub fn new(name: String) -> Self { - Self { name, data_files: Vec::new() } - } -} - -pub struct ExeParser<'a> { - pub resources: Resources<'a>, - pub section_headers: Box<&'a SectionHeaders>, -} - -impl<'a> ExeParser<'a> { - pub fn from(file: &'a Vec) -> GameResult { - let pe = PeFile::from_bytes(file); - - return match pe { - Ok(pe) => { - let resources = pe.resources(); - - if resources.is_err() { - return Err(ParseError("Failed to parse resources.".to_string())); - } - - let section_headers = pe.section_headers(); - - Ok(Self { resources: resources.unwrap(), section_headers: Box::new(section_headers) }) - } - Err(_) => Err(ParseError("Failed to parse PE file".to_string())), - }; - } - - pub fn get_resource_dir(&self, name: String) -> GameResult { - let mut dir_data = ExeResourceDirectory::new(name.to_owned()); - - let path = format!("/{}", name.to_owned()); - let dir = self.resources.find_dir(&path); - - return match dir { - Ok(dir) => { - self.read_dir(dir, &mut dir_data, "unknown".to_string()); - Ok(dir_data) - } - Err(_) => return Err(ParseError("Failed to find resource directory.".to_string())), - }; - } - - pub fn get_bitmap_dir(&self) -> GameResult { - let mut dir_data = ExeResourceDirectory::new("Bitmap".to_string()); - - let root = self.resources.root().unwrap(); - let dir = root.get_dir(Name::Id(RT_BITMAP.into())); - - return match dir { - Ok(dir) => { - self.read_dir(dir, &mut dir_data, "unknown".to_string()); - Ok(dir_data) - } - Err(_) => return Err(ParseError("Failed to open bitmap directory.".to_string())), - }; - } - - pub fn get_named_section_byte_range(&self, name: String) -> GameResult>> { - let section_header = self.section_headers.by_name(name.as_bytes()); - return match section_header { - Some(section_header) => Ok(Some(section_header.file_range())), - None => Ok(None), - }; - } - - fn read_dir(&self, directory: Directory, dir_data: &mut ExeResourceDirectory, last_dir_name: String) { - for dir in directory.entries() { - let raw_entry = dir.entry(); - - if raw_entry.is_err() { - continue; - } - - if let Entry::Directory(entry) = raw_entry.unwrap() { - let dir_name = dir.name(); - let name = match dir_name { - Ok(name) => name.to_string(), - Err(_) => last_dir_name.to_owned(), - }; - self.read_dir(entry, dir_data, name); - } - - if let Entry::DataEntry(entry) = raw_entry.unwrap() { - let entry_bytes = entry.bytes(); - if entry_bytes.is_err() { - continue; - } - - let bytes = entry_bytes.unwrap(); - let data_file = DataFile::from(last_dir_name.to_owned(), bytes.to_vec()); - dir_data.data_files.push(data_file); - } - } - } -} diff --git a/src/framework/backend.rs b/src/framework/backend.rs index fe7808a..f1b1886 100644 --- a/src/framework/backend.rs +++ b/src/framework/backend.rs @@ -1,12 +1,12 @@ -use imgui::DrawData; use std::any::Any; +use imgui::DrawData; + use crate::common::{Color, Rect}; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::framework::graphics::BlendMode; -use crate::graphics::VSyncMode; -use crate::Game; +use crate::framework::graphics::{BlendMode, VSyncMode}; +use crate::game::Game; #[repr(C)] #[derive(Copy, Clone)] @@ -102,14 +102,14 @@ pub fn init_backend(headless: bool, size_hint: (u16, u16)) -> GameResult - { - state_ref.shutdown(); - } + if window_id == window.window().id() => + { + state_ref.shutdown(); + } Event::Resumed => { { let mut mutex = GAME_SUSPENDED.lock().unwrap(); @@ -187,74 +187,74 @@ impl BackendEventLoop for GlutinEventLoop { } #[cfg(target_os = "android")] - unsafe { + unsafe { window.surface_destroyed(); } state_ref.sound_manager.pause(); } Event::WindowEvent { event: WindowEvent::Resized(size), window_id } - if window_id == window.window().id() => - { - if let Some(renderer) = &ctx.renderer { - if let Ok(imgui) = renderer.imgui() { - imgui.io_mut().display_size = [size.width as f32, size.height as f32]; + if window_id == window.window().id() => + { + if let Some(renderer) = &ctx.renderer { + if let Ok(imgui) = renderer.imgui() { + imgui.io_mut().display_size = [size.width as f32, size.height as f32]; + } + + ctx.real_screen_size = (size.width, size.height); + ctx.screen_size = get_scaled_size(size.width.max(1), size.height.max(1)); + state_ref.handle_resize(ctx).unwrap(); } - - ctx.real_screen_size = (size.width, size.height); - ctx.screen_size = get_scaled_size(size.width.max(1), size.height.max(1)); - state_ref.handle_resize(ctx).unwrap(); } - } Event::WindowEvent { event: WindowEvent::Touch(touch), window_id } - if window_id == window.window().id() => - { - let mut controls = &mut state_ref.touch_controls; - let scale = state_ref.scale as f64; - let loc_x = (touch.location.x * ctx.screen_size.0 as f64 / ctx.real_screen_size.0 as f64) / scale; - let loc_y = (touch.location.y * ctx.screen_size.1 as f64 / ctx.real_screen_size.1 as f64) / scale; + if window_id == window.window().id() => + { + let mut controls = &mut state_ref.touch_controls; + let scale = state_ref.scale as f64; + let loc_x = (touch.location.x * ctx.screen_size.0 as f64 / ctx.real_screen_size.0 as f64) / scale; + let loc_y = (touch.location.y * ctx.screen_size.1 as f64 / ctx.real_screen_size.1 as f64) / scale; - match touch.phase { - TouchPhase::Started | TouchPhase::Moved => { - if let Some(point) = controls.points.iter_mut().find(|p| p.id == touch.id) { - point.last_position = point.position; - point.position = (loc_x, loc_y); - } else { - controls.touch_id_counter = controls.touch_id_counter.wrapping_add(1); + match touch.phase { + TouchPhase::Started | TouchPhase::Moved => { + if let Some(point) = controls.points.iter_mut().find(|p| p.id == touch.id) { + point.last_position = point.position; + point.position = (loc_x, loc_y); + } else { + controls.touch_id_counter = controls.touch_id_counter.wrapping_add(1); - let point = TouchPoint { - id: touch.id, - touch_id: controls.touch_id_counter, - position: (loc_x, loc_y), - last_position: (0.0, 0.0), - }; - controls.points.push(point); + let point = TouchPoint { + id: touch.id, + touch_id: controls.touch_id_counter, + position: (loc_x, loc_y), + last_position: (0.0, 0.0), + }; + controls.points.push(point); - if touch.phase == TouchPhase::Started { - controls.clicks.push(point); + if touch.phase == TouchPhase::Started { + controls.clicks.push(point); + } } } - } - TouchPhase::Ended | TouchPhase::Cancelled => { - controls.points.retain(|p| p.id != touch.id); - controls.clicks.retain(|p| p.id != touch.id); + TouchPhase::Ended | TouchPhase::Cancelled => { + controls.points.retain(|p| p.id != touch.id); + controls.clicks.retain(|p| p.id != touch.id); + } } } - } Event::WindowEvent { event: WindowEvent::KeyboardInput { input, .. }, window_id } - if window_id == window.window().id() => - { - if let Some(keycode) = input.virtual_keycode { - if let Some(drs_scan) = conv_keycode(keycode) { - let key_state = match input.state { - ElementState::Pressed => true, - ElementState::Released => false, - }; + if window_id == window.window().id() => + { + if let Some(keycode) = input.virtual_keycode { + if let Some(drs_scan) = conv_keycode(keycode) { + let key_state = match input.state { + ElementState::Pressed => true, + ElementState::Released => false, + }; - ctx.keyboard_context.set_key(drs_scan, key_state); + ctx.keyboard_context.set_key(drs_scan, key_state); + } } } - } Event::RedrawRequested(id) if id == window.window().id() => { { let mutex = GAME_SUSPENDED.lock().unwrap(); @@ -264,16 +264,16 @@ impl BackendEventLoop for GlutinEventLoop { } #[cfg(not(target_os = "android"))] - { - if let Err(err) = game.draw(ctx) { - log::error!("Failed to draw frame: {}", err); + { + if let Err(err) = game.draw(ctx) { + log::error!("Failed to draw frame: {}", err); + } + + window.window().request_redraw(); } - window.window().request_redraw(); - } - #[cfg(target_os = "android")] - request_android_redraw(); + request_android_redraw(); } Event::MainEventsCleared => { if state_ref.shutdown { @@ -292,20 +292,20 @@ impl BackendEventLoop for GlutinEventLoop { game.update(ctx).unwrap(); #[cfg(target_os = "android")] - { - match get_insets() { - Ok(insets) => { - ctx.screen_insets = insets; + { + match get_insets() { + Ok(insets) => { + ctx.screen_insets = insets; + } + Err(e) => { + log::error!("Failed to update insets: {}", e); + } } - Err(e) => { - log::error!("Failed to update insets: {}", e); - } - } - if let Err(err) = game.draw(ctx) { - log::error!("Failed to draw frame: {}", err); + if let Err(err) = game.draw(ctx) { + log::error!("Failed to draw frame: {}", err); + } } - } if state_ref.next_scene.is_some() { mem::swap(&mut game.scene, &mut state_ref.next_scene); @@ -320,7 +320,7 @@ impl BackendEventLoop for GlutinEventLoop { }); } - fn new_renderer(&self, _ctx: *mut Context) -> GameResult> { + fn new_renderer(&self, ctx: *mut Context) -> GameResult> { let mut imgui = imgui::Context::create(); imgui.io_mut().display_size = [640.0, 480.0]; @@ -359,7 +359,7 @@ impl BackendEventLoop for GlutinEventLoop { *user_data = Rc::into_raw(refs) as *mut c_void; } - let gl_context = GLContext { gles2_mode: true, get_proc_address, swap_buffers, user_data }; + let gl_context = GLContext { gles2_mode: true, is_sdl: false, get_proc_address, swap_buffers, user_data, ctx }; Ok(Box::new(OpenGLRenderer::new(gl_context, UnsafeCell::new(imgui)))) } diff --git a/src/framework/backend_null.rs b/src/framework/backend_null.rs index 3ff2ee3..4b41b6b 100644 --- a/src/framework/backend_null.rs +++ b/src/framework/backend_null.rs @@ -11,7 +11,7 @@ use crate::framework::backend::{ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics::BlendMode; -use crate::Game; +use crate::game::Game; pub struct NullBackend; diff --git a/src/framework/backend_sdl2.rs b/src/framework/backend_sdl2.rs index 025cc7b..cdb8192 100644 --- a/src/framework/backend_sdl2.rs +++ b/src/framework/backend_sdl2.rs @@ -7,9 +7,10 @@ use std::ptr::{null, null_mut}; use std::rc::Rc; use std::time::{Duration, Instant}; +use imgui::{ConfigFlags, DrawCmd, DrawData, DrawIdx, DrawVert, Key, MouseCursor, TextureId, Ui}; use imgui::internal::RawWrapper; use imgui::sys::{ImGuiKey_Backspace, ImGuiKey_Delete, ImGuiKey_Enter}; -use imgui::{ConfigFlags, DrawCmd, DrawData, DrawIdx, DrawVert, Key, MouseCursor, TextureId, Ui}; +use sdl2::{controller, EventPump, GameControllerSubsystem, keyboard, pixels, Sdl, VideoSubsystem}; use sdl2::controller::GameController; use sdl2::event::{Event, WindowEvent}; use sdl2::keyboard::Scancode; @@ -19,7 +20,6 @@ use sdl2::render::{Texture, TextureCreator, TextureQuery, WindowCanvas}; use sdl2::video::GLProfile; use sdl2::video::Window; use sdl2::video::WindowContext; -use sdl2::{controller, keyboard, pixels, EventPump, GameControllerSubsystem, Sdl, VideoSubsystem}; use crate::common::{Color, Rect}; use crate::framework::backend::{ @@ -27,18 +27,15 @@ use crate::framework::backend::{ }; use crate::framework::context::Context; use crate::framework::error::{GameError, GameResult}; +use crate::framework::filesystem; use crate::framework::gamepad::{Axis, Button}; use crate::framework::graphics::BlendMode; use crate::framework::keyboard::ScanCode; use crate::framework::render_opengl::{GLContext, OpenGLRenderer}; use crate::framework::ui::init_imgui; -use crate::graphics::VSyncMode; -use crate::shared_game_state::WindowMode; -use crate::Game; -use crate::GameError::RenderError; -use crate::GAME_SUSPENDED; - -use super::filesystem; +use crate::game::Game; +use crate::game::GAME_SUSPENDED; +use crate::game::shared_game_state::WindowMode; pub struct SDL2Backend { context: Sdl, @@ -170,7 +167,7 @@ impl SDL2EventLoop { window.resizable(); #[cfg(feature = "render-opengl")] - window.opengl(); + window.opengl(); let window = window.build().map_err(|e| GameError::WindowError(e.to_string()))?; let opengl_available = if let Ok(v) = std::env::var("CAVESTORY_NO_OPENGL") { v != "1" } else { true }; @@ -212,7 +209,7 @@ impl BackendEventLoop for SDL2EventLoop { loop { #[cfg(target_os = "macos")] - unsafe { + unsafe { use objc::*; // no UB: fields are initialized by SDL_GetWindowWMInfo @@ -409,19 +406,19 @@ impl BackendEventLoop for SDL2EventLoop { fn new_renderer(&self, ctx: *mut Context) -> GameResult> { #[cfg(feature = "render-opengl")] - { - let mut refs = self.refs.borrow_mut(); - match refs.window.window().gl_create_context() { - Ok(gl_ctx) => { - refs.window.window().gl_make_current(&gl_ctx).map_err(|e| GameError::RenderError(e.to_string()))?; - refs.gl_context = Some(gl_ctx); - } - Err(err) => { - *self.opengl_available.borrow_mut() = false; - log::error!("Failed to initialize OpenGL context, falling back to SDL2 renderer: {}", err); + { + let mut refs = self.refs.borrow_mut(); + match refs.window.window().gl_create_context() { + Ok(gl_ctx) => { + refs.window.window().gl_make_current(&gl_ctx).map_err(|e| GameError::RenderError(e.to_string()))?; + refs.gl_context = Some(gl_ctx); + } + Err(err) => { + *self.opengl_available.borrow_mut() = false; + log::error!("Failed to initialize OpenGL context, falling back to SDL2 renderer: {}", err); + } } } - } #[cfg(feature = "render-opengl")] if *self.opengl_available.borrow() { @@ -671,7 +668,7 @@ impl BackendRenderer for SDL2Renderer { let sdl2_texture = texture .as_any() .downcast_ref::() - .ok_or(RenderError("This texture was not created by SDL2 backend.".to_string()))?; + .ok_or(GameError::RenderError("This texture was not created by SDL2 backend.".to_string()))?; unsafe { if let Some(target) = &sdl2_texture.texture { @@ -866,7 +863,7 @@ impl BackendRenderer for SDL2Renderer { texture .as_any() .downcast_ref::() - .ok_or(RenderError("This texture was not created by SDL2 backend.".to_string()))? + .ok_or(GameError::RenderError("This texture was not created by SDL2 backend.".to_string()))? .texture .as_ref() .map_or(null_mut(), |t| t.raw()) diff --git a/src/framework/context.rs b/src/framework/context.rs index fbaa40b..2a06c32 100644 --- a/src/framework/context.rs +++ b/src/framework/context.rs @@ -1,10 +1,10 @@ -use crate::framework::backend::{init_backend, BackendRenderer}; +use crate::framework::backend::{BackendRenderer, init_backend}; use crate::framework::error::GameResult; use crate::framework::filesystem::Filesystem; use crate::framework::gamepad::GamepadContext; +use crate::framework::graphics::VSyncMode; use crate::framework::keyboard::KeyboardContext; -use crate::graphics::VSyncMode; -use crate::Game; +use crate::game::Game; pub struct Context { pub headless: bool, diff --git a/src/framework/error.rs b/src/framework/error.rs index 3b3769c..b1f27a2 100644 --- a/src/framework/error.rs +++ b/src/framework/error.rs @@ -3,8 +3,8 @@ use std::error::Error; use std::fmt; use std::string::FromUtf8Error; -use std::sync::mpsc::SendError; use std::sync::{Arc, PoisonError}; +use std::sync::mpsc::SendError; /// An enum containing all kinds of game framework errors. #[derive(Debug, Clone)] diff --git a/src/framework/filesystem.rs b/src/framework/filesystem.rs index 544d358..f2fd53b 100644 --- a/src/framework/filesystem.rs +++ b/src/framework/filesystem.rs @@ -160,7 +160,7 @@ impl Filesystem { pub(crate) fn user_read_dir>( &self, path: P, - ) -> GameResult>> { + ) -> GameResult>> { let itr = self .user_vfs .read_dir(path.as_ref())? @@ -175,7 +175,7 @@ impl Filesystem { pub(crate) fn read_dir>( &self, path: P, - ) -> GameResult>> { + ) -> GameResult>> { let itr = self .vfs .read_dir(path.as_ref())? @@ -303,7 +303,7 @@ pub fn user_is_dir>(ctx: &Context, path: P) -> bool { pub fn user_read_dir>( ctx: &Context, path: P, -) -> GameResult>> { +) -> GameResult>> { ctx.filesystem.user_read_dir(path) } @@ -339,7 +339,7 @@ pub fn is_dir>(ctx: &Context, path: P) -> bool { /// in no particular order. /// /// Lists the base directory if an empty path is given. -pub fn read_dir>(ctx: &Context, path: P) -> GameResult>> { +pub fn read_dir>(ctx: &Context, path: P) -> GameResult>> { ctx.filesystem.read_dir(path) } @@ -347,7 +347,7 @@ pub fn read_dir_find>( ctx: &Context, roots: &Vec, path: P, -) -> GameResult>> { +) -> GameResult>> { let mut files = Vec::new(); for root in roots { diff --git a/src/framework/gamepad.rs b/src/framework/gamepad.rs index f711fb7..384761e 100644 --- a/src/framework/gamepad.rs +++ b/src/framework/gamepad.rs @@ -3,10 +3,9 @@ use std::collections::{HashMap, HashSet}; use sdl2::controller::GameController; use serde::{Deserialize, Serialize}; -use crate::shared_game_state::SharedGameState; use crate::{common::Rect, engine_constants::EngineConstants, framework::context::Context}; - use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; const QUAKE_RUMBLE_LOW_FREQ: u16 = 0x3000; const QUAKE_RUMBLE_HI_FREQ: u16 = 0; diff --git a/src/framework/gl.rs b/src/framework/gl.rs index 56f6e20..93abc2d 100644 --- a/src/framework/gl.rs +++ b/src/framework/gl.rs @@ -1,83 +1,84 @@ +mod __gl_imports { + pub use std::marker::Send; + pub use std::mem; + pub use std::os::raw; +} - mod __gl_imports { - pub use std::mem; - pub use std::marker::Send; - pub use std::os::raw; - } - - pub mod types { - #![allow(non_camel_case_types, non_snake_case, dead_code, missing_copy_implementations)] - -// Common types from OpenGL 1.1 -pub type GLenum = super::__gl_imports::raw::c_uint; -pub type GLboolean = super::__gl_imports::raw::c_uchar; -pub type GLbitfield = super::__gl_imports::raw::c_uint; -pub type GLvoid = super::__gl_imports::raw::c_void; -pub type GLbyte = super::__gl_imports::raw::c_char; -pub type GLshort = super::__gl_imports::raw::c_short; -pub type GLint = super::__gl_imports::raw::c_int; -pub type GLclampx = super::__gl_imports::raw::c_int; -pub type GLubyte = super::__gl_imports::raw::c_uchar; -pub type GLushort = super::__gl_imports::raw::c_ushort; -pub type GLuint = super::__gl_imports::raw::c_uint; -pub type GLsizei = super::__gl_imports::raw::c_int; -pub type GLfloat = super::__gl_imports::raw::c_float; -pub type GLclampf = super::__gl_imports::raw::c_float; -pub type GLdouble = super::__gl_imports::raw::c_double; -pub type GLclampd = super::__gl_imports::raw::c_double; -pub type GLeglImageOES = *const super::__gl_imports::raw::c_void; -pub type GLchar = super::__gl_imports::raw::c_char; -pub type GLcharARB = super::__gl_imports::raw::c_char; +pub mod types { + #![allow(non_camel_case_types, non_snake_case, dead_code, missing_copy_implementations)] -#[cfg(target_os = "macos")] -pub type GLhandleARB = *const super::__gl_imports::raw::c_void; -#[cfg(not(target_os = "macos"))] -pub type GLhandleARB = super::__gl_imports::raw::c_uint; + // Common types from OpenGL 1.1 + pub type GLenum = super::__gl_imports::raw::c_uint; + pub type GLboolean = super::__gl_imports::raw::c_uchar; + pub type GLbitfield = super::__gl_imports::raw::c_uint; + pub type GLvoid = super::__gl_imports::raw::c_void; + pub type GLbyte = super::__gl_imports::raw::c_char; + pub type GLshort = super::__gl_imports::raw::c_short; + pub type GLint = super::__gl_imports::raw::c_int; + pub type GLclampx = super::__gl_imports::raw::c_int; + pub type GLubyte = super::__gl_imports::raw::c_uchar; + pub type GLushort = super::__gl_imports::raw::c_ushort; + pub type GLuint = super::__gl_imports::raw::c_uint; + pub type GLsizei = super::__gl_imports::raw::c_int; + pub type GLfloat = super::__gl_imports::raw::c_float; + pub type GLclampf = super::__gl_imports::raw::c_float; + pub type GLdouble = super::__gl_imports::raw::c_double; + pub type GLclampd = super::__gl_imports::raw::c_double; + pub type GLeglImageOES = *const super::__gl_imports::raw::c_void; + pub type GLchar = super::__gl_imports::raw::c_char; + pub type GLcharARB = super::__gl_imports::raw::c_char; -pub type GLhalfARB = super::__gl_imports::raw::c_ushort; -pub type GLhalf = super::__gl_imports::raw::c_ushort; + #[cfg(target_os = "macos")] + pub type GLhandleARB = *const super::__gl_imports::raw::c_void; + #[cfg(not(target_os = "macos"))] + pub type GLhandleARB = super::__gl_imports::raw::c_uint; -// Must be 32 bits -pub type GLfixed = GLint; + pub type GLhalfARB = super::__gl_imports::raw::c_ushort; + pub type GLhalf = super::__gl_imports::raw::c_ushort; -pub type GLintptr = isize; -pub type GLsizeiptr = isize; -pub type GLint64 = i64; -pub type GLuint64 = u64; -pub type GLintptrARB = isize; -pub type GLsizeiptrARB = isize; -pub type GLint64EXT = i64; -pub type GLuint64EXT = u64; + // Must be 32 bits + pub type GLfixed = GLint; -pub enum __GLsync {} -pub type GLsync = *const __GLsync; + pub type GLintptr = isize; + pub type GLsizeiptr = isize; + pub type GLint64 = i64; + pub type GLuint64 = u64; + pub type GLintptrARB = isize; + pub type GLsizeiptrARB = isize; + pub type GLint64EXT = i64; + pub type GLuint64EXT = u64; -// compatible with OpenCL cl_context -pub enum _cl_context {} -pub enum _cl_event {} + pub enum __GLsync {} -pub type GLDEBUGPROC = Option; -pub type GLDEBUGPROCARB = Option; -pub type GLDEBUGPROCKHR = Option; + pub type GLsync = *const __GLsync; + + // compatible with OpenCL cl_context + pub enum _cl_context {} + + pub enum _cl_event {} + + pub type GLDEBUGPROC = Option; + pub type GLDEBUGPROCARB = Option; + pub type GLDEBUGPROCKHR = Option; // GLES 1 types // "pub type GLclampx = i32;", @@ -108,1858 +109,2727 @@ pub type GLDEBUGPROCKHR = Option; -pub type GLhalfNV = super::__gl_imports::raw::c_ushort; -pub type GLvdpauSurfaceNV = GLintptr; - + // Vendor extension types + pub type GLDEBUGPROCAMD = Option; + pub type GLhalfNV = super::__gl_imports::raw::c_ushort; + pub type GLvdpauSurfaceNV = GLintptr; } -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_ATTRIBUTES: types::GLenum = 0x8B89; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_ATTRIBUTE_MAX_LENGTH: types::GLenum = 0x8B8A; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_TEXTURE: types::GLenum = 0x84E0; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_UNIFORMS: types::GLenum = 0x8B86; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_UNIFORM_BLOCKS: types::GLenum = 0x8A36; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: types::GLenum = 0x8A35; -#[allow(dead_code, non_upper_case_globals)] pub const ACTIVE_UNIFORM_MAX_LENGTH: types::GLenum = 0x8B87; -#[allow(dead_code, non_upper_case_globals)] pub const ALIASED_LINE_WIDTH_RANGE: types::GLenum = 0x846E; -#[allow(dead_code, non_upper_case_globals)] pub const ALIASED_POINT_SIZE_RANGE: types::GLenum = 0x846D; -#[allow(dead_code, non_upper_case_globals)] pub const ALPHA: types::GLenum = 0x1906; -#[allow(dead_code, non_upper_case_globals)] pub const ALPHA_BITS: types::GLenum = 0x0D55; -#[allow(dead_code, non_upper_case_globals)] pub const ALREADY_SIGNALED: types::GLenum = 0x911A; -#[allow(dead_code, non_upper_case_globals)] pub const ALWAYS: types::GLenum = 0x0207; -#[allow(dead_code, non_upper_case_globals)] pub const ANY_SAMPLES_PASSED: types::GLenum = 0x8C2F; -#[allow(dead_code, non_upper_case_globals)] pub const ANY_SAMPLES_PASSED_CONSERVATIVE: types::GLenum = 0x8D6A; -#[allow(dead_code, non_upper_case_globals)] pub const ARRAY_BUFFER: types::GLenum = 0x8892; -#[allow(dead_code, non_upper_case_globals)] pub const ARRAY_BUFFER_BINDING: types::GLenum = 0x8894; -#[allow(dead_code, non_upper_case_globals)] pub const ATTACHED_SHADERS: types::GLenum = 0x8B85; -#[allow(dead_code, non_upper_case_globals)] pub const BACK: types::GLenum = 0x0405; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND: types::GLenum = 0x0BE2; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_COLOR: types::GLenum = 0x8005; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_DST_ALPHA: types::GLenum = 0x80CA; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_DST_RGB: types::GLenum = 0x80C8; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_EQUATION: types::GLenum = 0x8009; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_EQUATION_ALPHA: types::GLenum = 0x883D; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_EQUATION_RGB: types::GLenum = 0x8009; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_SRC_ALPHA: types::GLenum = 0x80CB; -#[allow(dead_code, non_upper_case_globals)] pub const BLEND_SRC_RGB: types::GLenum = 0x80C9; -#[allow(dead_code, non_upper_case_globals)] pub const BLUE: types::GLenum = 0x1905; -#[allow(dead_code, non_upper_case_globals)] pub const BLUE_BITS: types::GLenum = 0x0D54; -#[allow(dead_code, non_upper_case_globals)] pub const BOOL: types::GLenum = 0x8B56; -#[allow(dead_code, non_upper_case_globals)] pub const BOOL_VEC2: types::GLenum = 0x8B57; -#[allow(dead_code, non_upper_case_globals)] pub const BOOL_VEC3: types::GLenum = 0x8B58; -#[allow(dead_code, non_upper_case_globals)] pub const BOOL_VEC4: types::GLenum = 0x8B59; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_ACCESS_FLAGS: types::GLenum = 0x911F; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_MAPPED: types::GLenum = 0x88BC; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_MAP_LENGTH: types::GLenum = 0x9120; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_MAP_OFFSET: types::GLenum = 0x9121; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_MAP_POINTER: types::GLenum = 0x88BD; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_SIZE: types::GLenum = 0x8764; -#[allow(dead_code, non_upper_case_globals)] pub const BUFFER_USAGE: types::GLenum = 0x8765; -#[allow(dead_code, non_upper_case_globals)] pub const BYTE: types::GLenum = 0x1400; -#[allow(dead_code, non_upper_case_globals)] pub const CCW: types::GLenum = 0x0901; -#[allow(dead_code, non_upper_case_globals)] pub const CLAMP_TO_EDGE: types::GLenum = 0x812F; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR: types::GLenum = 0x1800; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT0: types::GLenum = 0x8CE0; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT1: types::GLenum = 0x8CE1; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT10: types::GLenum = 0x8CEA; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT11: types::GLenum = 0x8CEB; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT12: types::GLenum = 0x8CEC; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT13: types::GLenum = 0x8CED; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT14: types::GLenum = 0x8CEE; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT15: types::GLenum = 0x8CEF; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT16: types::GLenum = 0x8CF0; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT17: types::GLenum = 0x8CF1; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT18: types::GLenum = 0x8CF2; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT19: types::GLenum = 0x8CF3; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT2: types::GLenum = 0x8CE2; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT20: types::GLenum = 0x8CF4; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT21: types::GLenum = 0x8CF5; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT22: types::GLenum = 0x8CF6; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT23: types::GLenum = 0x8CF7; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT24: types::GLenum = 0x8CF8; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT25: types::GLenum = 0x8CF9; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT26: types::GLenum = 0x8CFA; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT27: types::GLenum = 0x8CFB; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT28: types::GLenum = 0x8CFC; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT29: types::GLenum = 0x8CFD; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT3: types::GLenum = 0x8CE3; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT30: types::GLenum = 0x8CFE; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT31: types::GLenum = 0x8CFF; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT4: types::GLenum = 0x8CE4; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT5: types::GLenum = 0x8CE5; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT6: types::GLenum = 0x8CE6; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT7: types::GLenum = 0x8CE7; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT8: types::GLenum = 0x8CE8; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_ATTACHMENT9: types::GLenum = 0x8CE9; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_BUFFER_BIT: types::GLenum = 0x00004000; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_CLEAR_VALUE: types::GLenum = 0x0C22; -#[allow(dead_code, non_upper_case_globals)] pub const COLOR_WRITEMASK: types::GLenum = 0x0C23; -#[allow(dead_code, non_upper_case_globals)] pub const COMPARE_REF_TO_TEXTURE: types::GLenum = 0x884E; -#[allow(dead_code, non_upper_case_globals)] pub const COMPILE_STATUS: types::GLenum = 0x8B81; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_R11_EAC: types::GLenum = 0x9270; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_RG11_EAC: types::GLenum = 0x9272; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_RGB8_ETC2: types::GLenum = 0x9274; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: types::GLenum = 0x9276; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_RGBA8_ETC2_EAC: types::GLenum = 0x9278; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_SIGNED_R11_EAC: types::GLenum = 0x9271; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_SIGNED_RG11_EAC: types::GLenum = 0x9273; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: types::GLenum = 0x9279; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_SRGB8_ETC2: types::GLenum = 0x9275; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: types::GLenum = 0x9277; -#[allow(dead_code, non_upper_case_globals)] pub const COMPRESSED_TEXTURE_FORMATS: types::GLenum = 0x86A3; -#[allow(dead_code, non_upper_case_globals)] pub const CONDITION_SATISFIED: types::GLenum = 0x911C; -#[allow(dead_code, non_upper_case_globals)] pub const CONSTANT_ALPHA: types::GLenum = 0x8003; -#[allow(dead_code, non_upper_case_globals)] pub const CONSTANT_COLOR: types::GLenum = 0x8001; -#[allow(dead_code, non_upper_case_globals)] pub const COPY_READ_BUFFER: types::GLenum = 0x8F36; -#[allow(dead_code, non_upper_case_globals)] pub const COPY_READ_BUFFER_BINDING: types::GLenum = 0x8F36; -#[allow(dead_code, non_upper_case_globals)] pub const COPY_WRITE_BUFFER: types::GLenum = 0x8F37; -#[allow(dead_code, non_upper_case_globals)] pub const COPY_WRITE_BUFFER_BINDING: types::GLenum = 0x8F37; -#[allow(dead_code, non_upper_case_globals)] pub const CULL_FACE: types::GLenum = 0x0B44; -#[allow(dead_code, non_upper_case_globals)] pub const CULL_FACE_MODE: types::GLenum = 0x0B45; -#[allow(dead_code, non_upper_case_globals)] pub const CURRENT_PROGRAM: types::GLenum = 0x8B8D; -#[allow(dead_code, non_upper_case_globals)] pub const CURRENT_QUERY: types::GLenum = 0x8865; -#[allow(dead_code, non_upper_case_globals)] pub const CURRENT_VERTEX_ATTRIB: types::GLenum = 0x8626; -#[allow(dead_code, non_upper_case_globals)] pub const CW: types::GLenum = 0x0900; -#[allow(dead_code, non_upper_case_globals)] pub const DECR: types::GLenum = 0x1E03; -#[allow(dead_code, non_upper_case_globals)] pub const DECR_WRAP: types::GLenum = 0x8508; -#[allow(dead_code, non_upper_case_globals)] pub const DELETE_STATUS: types::GLenum = 0x8B80; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH: types::GLenum = 0x1801; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH24_STENCIL8: types::GLenum = 0x88F0; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH32F_STENCIL8: types::GLenum = 0x8CAD; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_ATTACHMENT: types::GLenum = 0x8D00; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_BITS: types::GLenum = 0x0D56; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_BUFFER_BIT: types::GLenum = 0x00000100; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_CLEAR_VALUE: types::GLenum = 0x0B73; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_COMPONENT: types::GLenum = 0x1902; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_COMPONENT16: types::GLenum = 0x81A5; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_COMPONENT24: types::GLenum = 0x81A6; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_COMPONENT32F: types::GLenum = 0x8CAC; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_FUNC: types::GLenum = 0x0B74; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_RANGE: types::GLenum = 0x0B70; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_STENCIL: types::GLenum = 0x84F9; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_STENCIL_ATTACHMENT: types::GLenum = 0x821A; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_TEST: types::GLenum = 0x0B71; -#[allow(dead_code, non_upper_case_globals)] pub const DEPTH_WRITEMASK: types::GLenum = 0x0B72; -#[allow(dead_code, non_upper_case_globals)] pub const DITHER: types::GLenum = 0x0BD0; -#[allow(dead_code, non_upper_case_globals)] pub const DONT_CARE: types::GLenum = 0x1100; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER0: types::GLenum = 0x8825; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER1: types::GLenum = 0x8826; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER10: types::GLenum = 0x882F; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER11: types::GLenum = 0x8830; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER12: types::GLenum = 0x8831; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER13: types::GLenum = 0x8832; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER14: types::GLenum = 0x8833; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER15: types::GLenum = 0x8834; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER2: types::GLenum = 0x8827; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER3: types::GLenum = 0x8828; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER4: types::GLenum = 0x8829; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER5: types::GLenum = 0x882A; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER6: types::GLenum = 0x882B; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER7: types::GLenum = 0x882C; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER8: types::GLenum = 0x882D; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_BUFFER9: types::GLenum = 0x882E; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_FRAMEBUFFER: types::GLenum = 0x8CA9; -#[allow(dead_code, non_upper_case_globals)] pub const DRAW_FRAMEBUFFER_BINDING: types::GLenum = 0x8CA6; -#[allow(dead_code, non_upper_case_globals)] pub const DST_ALPHA: types::GLenum = 0x0304; -#[allow(dead_code, non_upper_case_globals)] pub const DST_COLOR: types::GLenum = 0x0306; -#[allow(dead_code, non_upper_case_globals)] pub const DYNAMIC_COPY: types::GLenum = 0x88EA; -#[allow(dead_code, non_upper_case_globals)] pub const DYNAMIC_DRAW: types::GLenum = 0x88E8; -#[allow(dead_code, non_upper_case_globals)] pub const DYNAMIC_READ: types::GLenum = 0x88E9; -#[allow(dead_code, non_upper_case_globals)] pub const ELEMENT_ARRAY_BUFFER: types::GLenum = 0x8893; -#[allow(dead_code, non_upper_case_globals)] pub const ELEMENT_ARRAY_BUFFER_BINDING: types::GLenum = 0x8895; -#[allow(dead_code, non_upper_case_globals)] pub const EQUAL: types::GLenum = 0x0202; -#[allow(dead_code, non_upper_case_globals)] pub const EXTENSIONS: types::GLenum = 0x1F03; -#[allow(dead_code, non_upper_case_globals)] pub const FALSE: types::GLboolean = 0; -#[allow(dead_code, non_upper_case_globals)] pub const FASTEST: types::GLenum = 0x1101; -#[allow(dead_code, non_upper_case_globals)] pub const FIXED: types::GLenum = 0x140C; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT: types::GLenum = 0x1406; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_32_UNSIGNED_INT_24_8_REV: types::GLenum = 0x8DAD; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT2: types::GLenum = 0x8B5A; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT2x3: types::GLenum = 0x8B65; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT2x4: types::GLenum = 0x8B66; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT3: types::GLenum = 0x8B5B; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT3x2: types::GLenum = 0x8B67; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT3x4: types::GLenum = 0x8B68; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT4: types::GLenum = 0x8B5C; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT4x2: types::GLenum = 0x8B69; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_MAT4x3: types::GLenum = 0x8B6A; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_VEC2: types::GLenum = 0x8B50; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_VEC3: types::GLenum = 0x8B51; -#[allow(dead_code, non_upper_case_globals)] pub const FLOAT_VEC4: types::GLenum = 0x8B52; -#[allow(dead_code, non_upper_case_globals)] pub const FRAGMENT_SHADER: types::GLenum = 0x8B30; -#[allow(dead_code, non_upper_case_globals)] pub const FRAGMENT_SHADER_DERIVATIVE_HINT: types::GLenum = 0x8B8B; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER: types::GLenum = 0x8D40; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: types::GLenum = 0x8215; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: types::GLenum = 0x8214; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: types::GLenum = 0x8210; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: types::GLenum = 0x8211; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: types::GLenum = 0x8216; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: types::GLenum = 0x8213; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: types::GLenum = 0x8CD1; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: types::GLenum = 0x8CD0; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_RED_SIZE: types::GLenum = 0x8212; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: types::GLenum = 0x8217; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: types::GLenum = 0x8CD3; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: types::GLenum = 0x8CD4; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: types::GLenum = 0x8CD2; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_BINDING: types::GLenum = 0x8CA6; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_COMPLETE: types::GLenum = 0x8CD5; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_DEFAULT: types::GLenum = 0x8218; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_INCOMPLETE_ATTACHMENT: types::GLenum = 0x8CD6; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_INCOMPLETE_DIMENSIONS: types::GLenum = 0x8CD9; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: types::GLenum = 0x8CD7; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: types::GLenum = 0x8D56; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_UNDEFINED: types::GLenum = 0x8219; -#[allow(dead_code, non_upper_case_globals)] pub const FRAMEBUFFER_UNSUPPORTED: types::GLenum = 0x8CDD; -#[allow(dead_code, non_upper_case_globals)] pub const FRONT: types::GLenum = 0x0404; -#[allow(dead_code, non_upper_case_globals)] pub const FRONT_AND_BACK: types::GLenum = 0x0408; -#[allow(dead_code, non_upper_case_globals)] pub const FRONT_FACE: types::GLenum = 0x0B46; -#[allow(dead_code, non_upper_case_globals)] pub const FUNC_ADD: types::GLenum = 0x8006; -#[allow(dead_code, non_upper_case_globals)] pub const FUNC_REVERSE_SUBTRACT: types::GLenum = 0x800B; -#[allow(dead_code, non_upper_case_globals)] pub const FUNC_SUBTRACT: types::GLenum = 0x800A; -#[allow(dead_code, non_upper_case_globals)] pub const GENERATE_MIPMAP_HINT: types::GLenum = 0x8192; -#[allow(dead_code, non_upper_case_globals)] pub const GEQUAL: types::GLenum = 0x0206; -#[allow(dead_code, non_upper_case_globals)] pub const GREATER: types::GLenum = 0x0204; -#[allow(dead_code, non_upper_case_globals)] pub const GREEN: types::GLenum = 0x1904; -#[allow(dead_code, non_upper_case_globals)] pub const GREEN_BITS: types::GLenum = 0x0D53; -#[allow(dead_code, non_upper_case_globals)] pub const HALF_FLOAT: types::GLenum = 0x140B; -#[allow(dead_code, non_upper_case_globals)] pub const HIGH_FLOAT: types::GLenum = 0x8DF2; -#[allow(dead_code, non_upper_case_globals)] pub const HIGH_INT: types::GLenum = 0x8DF5; -#[allow(dead_code, non_upper_case_globals)] pub const IMPLEMENTATION_COLOR_READ_FORMAT: types::GLenum = 0x8B9B; -#[allow(dead_code, non_upper_case_globals)] pub const IMPLEMENTATION_COLOR_READ_TYPE: types::GLenum = 0x8B9A; -#[allow(dead_code, non_upper_case_globals)] pub const INCR: types::GLenum = 0x1E02; -#[allow(dead_code, non_upper_case_globals)] pub const INCR_WRAP: types::GLenum = 0x8507; -#[allow(dead_code, non_upper_case_globals)] pub const INFO_LOG_LENGTH: types::GLenum = 0x8B84; -#[allow(dead_code, non_upper_case_globals)] pub const INT: types::GLenum = 0x1404; -#[allow(dead_code, non_upper_case_globals)] pub const INTERLEAVED_ATTRIBS: types::GLenum = 0x8C8C; -#[allow(dead_code, non_upper_case_globals)] pub const INT_2_10_10_10_REV: types::GLenum = 0x8D9F; -#[allow(dead_code, non_upper_case_globals)] pub const INT_SAMPLER_2D: types::GLenum = 0x8DCA; -#[allow(dead_code, non_upper_case_globals)] pub const INT_SAMPLER_2D_ARRAY: types::GLenum = 0x8DCF; -#[allow(dead_code, non_upper_case_globals)] pub const INT_SAMPLER_3D: types::GLenum = 0x8DCB; -#[allow(dead_code, non_upper_case_globals)] pub const INT_SAMPLER_CUBE: types::GLenum = 0x8DCC; -#[allow(dead_code, non_upper_case_globals)] pub const INT_VEC2: types::GLenum = 0x8B53; -#[allow(dead_code, non_upper_case_globals)] pub const INT_VEC3: types::GLenum = 0x8B54; -#[allow(dead_code, non_upper_case_globals)] pub const INT_VEC4: types::GLenum = 0x8B55; -#[allow(dead_code, non_upper_case_globals)] pub const INVALID_ENUM: types::GLenum = 0x0500; -#[allow(dead_code, non_upper_case_globals)] pub const INVALID_FRAMEBUFFER_OPERATION: types::GLenum = 0x0506; -#[allow(dead_code, non_upper_case_globals)] pub const INVALID_INDEX: types::GLuint = 0xFFFFFFFF; -#[allow(dead_code, non_upper_case_globals)] pub const INVALID_OPERATION: types::GLenum = 0x0502; -#[allow(dead_code, non_upper_case_globals)] pub const INVALID_VALUE: types::GLenum = 0x0501; -#[allow(dead_code, non_upper_case_globals)] pub const INVERT: types::GLenum = 0x150A; -#[allow(dead_code, non_upper_case_globals)] pub const KEEP: types::GLenum = 0x1E00; -#[allow(dead_code, non_upper_case_globals)] pub const LEQUAL: types::GLenum = 0x0203; -#[allow(dead_code, non_upper_case_globals)] pub const LESS: types::GLenum = 0x0201; -#[allow(dead_code, non_upper_case_globals)] pub const LINEAR: types::GLenum = 0x2601; -#[allow(dead_code, non_upper_case_globals)] pub const LINEAR_MIPMAP_LINEAR: types::GLenum = 0x2703; -#[allow(dead_code, non_upper_case_globals)] pub const LINEAR_MIPMAP_NEAREST: types::GLenum = 0x2701; -#[allow(dead_code, non_upper_case_globals)] pub const LINES: types::GLenum = 0x0001; -#[allow(dead_code, non_upper_case_globals)] pub const LINE_LOOP: types::GLenum = 0x0002; -#[allow(dead_code, non_upper_case_globals)] pub const LINE_STRIP: types::GLenum = 0x0003; -#[allow(dead_code, non_upper_case_globals)] pub const LINE_WIDTH: types::GLenum = 0x0B21; -#[allow(dead_code, non_upper_case_globals)] pub const LINK_STATUS: types::GLenum = 0x8B82; -#[allow(dead_code, non_upper_case_globals)] pub const LOW_FLOAT: types::GLenum = 0x8DF0; -#[allow(dead_code, non_upper_case_globals)] pub const LOW_INT: types::GLenum = 0x8DF3; -#[allow(dead_code, non_upper_case_globals)] pub const LUMINANCE: types::GLenum = 0x1909; -#[allow(dead_code, non_upper_case_globals)] pub const LUMINANCE_ALPHA: types::GLenum = 0x190A; -#[allow(dead_code, non_upper_case_globals)] pub const MAJOR_VERSION: types::GLenum = 0x821B; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_FLUSH_EXPLICIT_BIT: types::GLenum = 0x0010; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_INVALIDATE_BUFFER_BIT: types::GLenum = 0x0008; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_INVALIDATE_RANGE_BIT: types::GLenum = 0x0004; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_READ_BIT: types::GLenum = 0x0001; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_UNSYNCHRONIZED_BIT: types::GLenum = 0x0020; -#[allow(dead_code, non_upper_case_globals)] pub const MAP_WRITE_BIT: types::GLenum = 0x0002; -#[allow(dead_code, non_upper_case_globals)] pub const MAX: types::GLenum = 0x8008; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_3D_TEXTURE_SIZE: types::GLenum = 0x8073; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_ARRAY_TEXTURE_LAYERS: types::GLenum = 0x88FF; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_COLOR_ATTACHMENTS: types::GLenum = 0x8CDF; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: types::GLenum = 0x8A33; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_COMBINED_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8B4D; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_COMBINED_UNIFORM_BLOCKS: types::GLenum = 0x8A2E; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: types::GLenum = 0x8A31; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_CUBE_MAP_TEXTURE_SIZE: types::GLenum = 0x851C; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_DRAW_BUFFERS: types::GLenum = 0x8824; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_ELEMENTS_INDICES: types::GLenum = 0x80E9; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_ELEMENTS_VERTICES: types::GLenum = 0x80E8; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_ELEMENT_INDEX: types::GLenum = 0x8D6B; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_FRAGMENT_INPUT_COMPONENTS: types::GLenum = 0x9125; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_FRAGMENT_UNIFORM_BLOCKS: types::GLenum = 0x8A2D; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_FRAGMENT_UNIFORM_COMPONENTS: types::GLenum = 0x8B49; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_FRAGMENT_UNIFORM_VECTORS: types::GLenum = 0x8DFD; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_PROGRAM_TEXEL_OFFSET: types::GLenum = 0x8905; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_RENDERBUFFER_SIZE: types::GLenum = 0x84E8; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_SAMPLES: types::GLenum = 0x8D57; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_SERVER_WAIT_TIMEOUT: types::GLenum = 0x9111; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8872; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TEXTURE_LOD_BIAS: types::GLenum = 0x84FD; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TEXTURE_SIZE: types::GLenum = 0x0D33; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: types::GLenum = 0x8C8A; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: types::GLenum = 0x8C8B; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: types::GLenum = 0x8C80; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_UNIFORM_BLOCK_SIZE: types::GLenum = 0x8A30; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_UNIFORM_BUFFER_BINDINGS: types::GLenum = 0x8A2F; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VARYING_COMPONENTS: types::GLenum = 0x8B4B; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VARYING_VECTORS: types::GLenum = 0x8DFC; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_ATTRIBS: types::GLenum = 0x8869; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_OUTPUT_COMPONENTS: types::GLenum = 0x9122; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8B4C; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_UNIFORM_BLOCKS: types::GLenum = 0x8A2B; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_UNIFORM_COMPONENTS: types::GLenum = 0x8B4A; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VERTEX_UNIFORM_VECTORS: types::GLenum = 0x8DFB; -#[allow(dead_code, non_upper_case_globals)] pub const MAX_VIEWPORT_DIMS: types::GLenum = 0x0D3A; -#[allow(dead_code, non_upper_case_globals)] pub const MEDIUM_FLOAT: types::GLenum = 0x8DF1; -#[allow(dead_code, non_upper_case_globals)] pub const MEDIUM_INT: types::GLenum = 0x8DF4; -#[allow(dead_code, non_upper_case_globals)] pub const MIN: types::GLenum = 0x8007; -#[allow(dead_code, non_upper_case_globals)] pub const MINOR_VERSION: types::GLenum = 0x821C; -#[allow(dead_code, non_upper_case_globals)] pub const MIN_PROGRAM_TEXEL_OFFSET: types::GLenum = 0x8904; -#[allow(dead_code, non_upper_case_globals)] pub const MIRRORED_REPEAT: types::GLenum = 0x8370; -#[allow(dead_code, non_upper_case_globals)] pub const NEAREST: types::GLenum = 0x2600; -#[allow(dead_code, non_upper_case_globals)] pub const NEAREST_MIPMAP_LINEAR: types::GLenum = 0x2702; -#[allow(dead_code, non_upper_case_globals)] pub const NEAREST_MIPMAP_NEAREST: types::GLenum = 0x2700; -#[allow(dead_code, non_upper_case_globals)] pub const NEVER: types::GLenum = 0x0200; -#[allow(dead_code, non_upper_case_globals)] pub const NICEST: types::GLenum = 0x1102; -#[allow(dead_code, non_upper_case_globals)] pub const NONE: types::GLenum = 0; -#[allow(dead_code, non_upper_case_globals)] pub const NOTEQUAL: types::GLenum = 0x0205; -#[allow(dead_code, non_upper_case_globals)] pub const NO_ERROR: types::GLenum = 0; -#[allow(dead_code, non_upper_case_globals)] pub const NUM_COMPRESSED_TEXTURE_FORMATS: types::GLenum = 0x86A2; -#[allow(dead_code, non_upper_case_globals)] pub const NUM_EXTENSIONS: types::GLenum = 0x821D; -#[allow(dead_code, non_upper_case_globals)] pub const NUM_PROGRAM_BINARY_FORMATS: types::GLenum = 0x87FE; -#[allow(dead_code, non_upper_case_globals)] pub const NUM_SAMPLE_COUNTS: types::GLenum = 0x9380; -#[allow(dead_code, non_upper_case_globals)] pub const NUM_SHADER_BINARY_FORMATS: types::GLenum = 0x8DF9; -#[allow(dead_code, non_upper_case_globals)] pub const OBJECT_TYPE: types::GLenum = 0x9112; -#[allow(dead_code, non_upper_case_globals)] pub const ONE: types::GLenum = 1; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_CONSTANT_ALPHA: types::GLenum = 0x8004; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_CONSTANT_COLOR: types::GLenum = 0x8002; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_DST_ALPHA: types::GLenum = 0x0305; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_DST_COLOR: types::GLenum = 0x0307; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_SRC_ALPHA: types::GLenum = 0x0303; -#[allow(dead_code, non_upper_case_globals)] pub const ONE_MINUS_SRC_COLOR: types::GLenum = 0x0301; -#[allow(dead_code, non_upper_case_globals)] pub const OUT_OF_MEMORY: types::GLenum = 0x0505; -#[allow(dead_code, non_upper_case_globals)] pub const PACK_ALIGNMENT: types::GLenum = 0x0D05; -#[allow(dead_code, non_upper_case_globals)] pub const PACK_ROW_LENGTH: types::GLenum = 0x0D02; -#[allow(dead_code, non_upper_case_globals)] pub const PACK_SKIP_PIXELS: types::GLenum = 0x0D04; -#[allow(dead_code, non_upper_case_globals)] pub const PACK_SKIP_ROWS: types::GLenum = 0x0D03; -#[allow(dead_code, non_upper_case_globals)] pub const PIXEL_PACK_BUFFER: types::GLenum = 0x88EB; -#[allow(dead_code, non_upper_case_globals)] pub const PIXEL_PACK_BUFFER_BINDING: types::GLenum = 0x88ED; -#[allow(dead_code, non_upper_case_globals)] pub const PIXEL_UNPACK_BUFFER: types::GLenum = 0x88EC; -#[allow(dead_code, non_upper_case_globals)] pub const PIXEL_UNPACK_BUFFER_BINDING: types::GLenum = 0x88EF; -#[allow(dead_code, non_upper_case_globals)] pub const POINTS: types::GLenum = 0x0000; -#[allow(dead_code, non_upper_case_globals)] pub const POLYGON_OFFSET_FACTOR: types::GLenum = 0x8038; -#[allow(dead_code, non_upper_case_globals)] pub const POLYGON_OFFSET_FILL: types::GLenum = 0x8037; -#[allow(dead_code, non_upper_case_globals)] pub const POLYGON_OFFSET_UNITS: types::GLenum = 0x2A00; -#[allow(dead_code, non_upper_case_globals)] pub const PRIMITIVE_RESTART_FIXED_INDEX: types::GLenum = 0x8D69; -#[allow(dead_code, non_upper_case_globals)] pub const PROGRAM_BINARY_FORMATS: types::GLenum = 0x87FF; -#[allow(dead_code, non_upper_case_globals)] pub const PROGRAM_BINARY_LENGTH: types::GLenum = 0x8741; -#[allow(dead_code, non_upper_case_globals)] pub const PROGRAM_BINARY_RETRIEVABLE_HINT: types::GLenum = 0x8257; -#[allow(dead_code, non_upper_case_globals)] pub const QUERY_RESULT: types::GLenum = 0x8866; -#[allow(dead_code, non_upper_case_globals)] pub const QUERY_RESULT_AVAILABLE: types::GLenum = 0x8867; -#[allow(dead_code, non_upper_case_globals)] pub const R11F_G11F_B10F: types::GLenum = 0x8C3A; -#[allow(dead_code, non_upper_case_globals)] pub const R16F: types::GLenum = 0x822D; -#[allow(dead_code, non_upper_case_globals)] pub const R16I: types::GLenum = 0x8233; -#[allow(dead_code, non_upper_case_globals)] pub const R16UI: types::GLenum = 0x8234; -#[allow(dead_code, non_upper_case_globals)] pub const R32F: types::GLenum = 0x822E; -#[allow(dead_code, non_upper_case_globals)] pub const R32I: types::GLenum = 0x8235; -#[allow(dead_code, non_upper_case_globals)] pub const R32UI: types::GLenum = 0x8236; -#[allow(dead_code, non_upper_case_globals)] pub const R8: types::GLenum = 0x8229; -#[allow(dead_code, non_upper_case_globals)] pub const R8I: types::GLenum = 0x8231; -#[allow(dead_code, non_upper_case_globals)] pub const R8UI: types::GLenum = 0x8232; -#[allow(dead_code, non_upper_case_globals)] pub const R8_SNORM: types::GLenum = 0x8F94; -#[allow(dead_code, non_upper_case_globals)] pub const RASTERIZER_DISCARD: types::GLenum = 0x8C89; -#[allow(dead_code, non_upper_case_globals)] pub const READ_BUFFER: types::GLenum = 0x0C02; -#[allow(dead_code, non_upper_case_globals)] pub const READ_FRAMEBUFFER: types::GLenum = 0x8CA8; -#[allow(dead_code, non_upper_case_globals)] pub const READ_FRAMEBUFFER_BINDING: types::GLenum = 0x8CAA; -#[allow(dead_code, non_upper_case_globals)] pub const RED: types::GLenum = 0x1903; -#[allow(dead_code, non_upper_case_globals)] pub const RED_BITS: types::GLenum = 0x0D52; -#[allow(dead_code, non_upper_case_globals)] pub const RED_INTEGER: types::GLenum = 0x8D94; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER: types::GLenum = 0x8D41; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_ALPHA_SIZE: types::GLenum = 0x8D53; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_BINDING: types::GLenum = 0x8CA7; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_BLUE_SIZE: types::GLenum = 0x8D52; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_DEPTH_SIZE: types::GLenum = 0x8D54; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_GREEN_SIZE: types::GLenum = 0x8D51; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_HEIGHT: types::GLenum = 0x8D43; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_INTERNAL_FORMAT: types::GLenum = 0x8D44; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_RED_SIZE: types::GLenum = 0x8D50; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_SAMPLES: types::GLenum = 0x8CAB; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_STENCIL_SIZE: types::GLenum = 0x8D55; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERBUFFER_WIDTH: types::GLenum = 0x8D42; -#[allow(dead_code, non_upper_case_globals)] pub const RENDERER: types::GLenum = 0x1F01; -#[allow(dead_code, non_upper_case_globals)] pub const REPEAT: types::GLenum = 0x2901; -#[allow(dead_code, non_upper_case_globals)] pub const REPLACE: types::GLenum = 0x1E01; -#[allow(dead_code, non_upper_case_globals)] pub const RG: types::GLenum = 0x8227; -#[allow(dead_code, non_upper_case_globals)] pub const RG16F: types::GLenum = 0x822F; -#[allow(dead_code, non_upper_case_globals)] pub const RG16I: types::GLenum = 0x8239; -#[allow(dead_code, non_upper_case_globals)] pub const RG16UI: types::GLenum = 0x823A; -#[allow(dead_code, non_upper_case_globals)] pub const RG32F: types::GLenum = 0x8230; -#[allow(dead_code, non_upper_case_globals)] pub const RG32I: types::GLenum = 0x823B; -#[allow(dead_code, non_upper_case_globals)] pub const RG32UI: types::GLenum = 0x823C; -#[allow(dead_code, non_upper_case_globals)] pub const RG8: types::GLenum = 0x822B; -#[allow(dead_code, non_upper_case_globals)] pub const RG8I: types::GLenum = 0x8237; -#[allow(dead_code, non_upper_case_globals)] pub const RG8UI: types::GLenum = 0x8238; -#[allow(dead_code, non_upper_case_globals)] pub const RG8_SNORM: types::GLenum = 0x8F95; -#[allow(dead_code, non_upper_case_globals)] pub const RGB: types::GLenum = 0x1907; -#[allow(dead_code, non_upper_case_globals)] pub const RGB10_A2: types::GLenum = 0x8059; -#[allow(dead_code, non_upper_case_globals)] pub const RGB10_A2UI: types::GLenum = 0x906F; -#[allow(dead_code, non_upper_case_globals)] pub const RGB16F: types::GLenum = 0x881B; -#[allow(dead_code, non_upper_case_globals)] pub const RGB16I: types::GLenum = 0x8D89; -#[allow(dead_code, non_upper_case_globals)] pub const RGB16UI: types::GLenum = 0x8D77; -#[allow(dead_code, non_upper_case_globals)] pub const RGB32F: types::GLenum = 0x8815; -#[allow(dead_code, non_upper_case_globals)] pub const RGB32I: types::GLenum = 0x8D83; -#[allow(dead_code, non_upper_case_globals)] pub const RGB32UI: types::GLenum = 0x8D71; -#[allow(dead_code, non_upper_case_globals)] pub const RGB565: types::GLenum = 0x8D62; -#[allow(dead_code, non_upper_case_globals)] pub const RGB5_A1: types::GLenum = 0x8057; -#[allow(dead_code, non_upper_case_globals)] pub const RGB8: types::GLenum = 0x8051; -#[allow(dead_code, non_upper_case_globals)] pub const RGB8I: types::GLenum = 0x8D8F; -#[allow(dead_code, non_upper_case_globals)] pub const RGB8UI: types::GLenum = 0x8D7D; -#[allow(dead_code, non_upper_case_globals)] pub const RGB8_SNORM: types::GLenum = 0x8F96; -#[allow(dead_code, non_upper_case_globals)] pub const RGB9_E5: types::GLenum = 0x8C3D; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA: types::GLenum = 0x1908; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA16F: types::GLenum = 0x881A; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA16I: types::GLenum = 0x8D88; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA16UI: types::GLenum = 0x8D76; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA32F: types::GLenum = 0x8814; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA32I: types::GLenum = 0x8D82; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA32UI: types::GLenum = 0x8D70; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA4: types::GLenum = 0x8056; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA8: types::GLenum = 0x8058; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA8I: types::GLenum = 0x8D8E; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA8UI: types::GLenum = 0x8D7C; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA8_SNORM: types::GLenum = 0x8F97; -#[allow(dead_code, non_upper_case_globals)] pub const RGBA_INTEGER: types::GLenum = 0x8D99; -#[allow(dead_code, non_upper_case_globals)] pub const RGB_INTEGER: types::GLenum = 0x8D98; -#[allow(dead_code, non_upper_case_globals)] pub const RG_INTEGER: types::GLenum = 0x8228; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_2D: types::GLenum = 0x8B5E; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_2D_ARRAY: types::GLenum = 0x8DC1; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_2D_ARRAY_SHADOW: types::GLenum = 0x8DC4; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_2D_SHADOW: types::GLenum = 0x8B62; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_3D: types::GLenum = 0x8B5F; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_BINDING: types::GLenum = 0x8919; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_CUBE: types::GLenum = 0x8B60; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLER_CUBE_SHADOW: types::GLenum = 0x8DC5; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLES: types::GLenum = 0x80A9; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLE_ALPHA_TO_COVERAGE: types::GLenum = 0x809E; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLE_BUFFERS: types::GLenum = 0x80A8; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLE_COVERAGE: types::GLenum = 0x80A0; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLE_COVERAGE_INVERT: types::GLenum = 0x80AB; -#[allow(dead_code, non_upper_case_globals)] pub const SAMPLE_COVERAGE_VALUE: types::GLenum = 0x80AA; -#[allow(dead_code, non_upper_case_globals)] pub const SCISSOR_BOX: types::GLenum = 0x0C10; -#[allow(dead_code, non_upper_case_globals)] pub const SCISSOR_TEST: types::GLenum = 0x0C11; -#[allow(dead_code, non_upper_case_globals)] pub const SEPARATE_ATTRIBS: types::GLenum = 0x8C8D; -#[allow(dead_code, non_upper_case_globals)] pub const SHADER_BINARY_FORMATS: types::GLenum = 0x8DF8; -#[allow(dead_code, non_upper_case_globals)] pub const SHADER_COMPILER: types::GLenum = 0x8DFA; -#[allow(dead_code, non_upper_case_globals)] pub const SHADER_SOURCE_LENGTH: types::GLenum = 0x8B88; -#[allow(dead_code, non_upper_case_globals)] pub const SHADER_TYPE: types::GLenum = 0x8B4F; -#[allow(dead_code, non_upper_case_globals)] pub const SHADING_LANGUAGE_VERSION: types::GLenum = 0x8B8C; -#[allow(dead_code, non_upper_case_globals)] pub const SHORT: types::GLenum = 0x1402; -#[allow(dead_code, non_upper_case_globals)] pub const SIGNALED: types::GLenum = 0x9119; -#[allow(dead_code, non_upper_case_globals)] pub const SIGNED_NORMALIZED: types::GLenum = 0x8F9C; -#[allow(dead_code, non_upper_case_globals)] pub const SRC_ALPHA: types::GLenum = 0x0302; -#[allow(dead_code, non_upper_case_globals)] pub const SRC_ALPHA_SATURATE: types::GLenum = 0x0308; -#[allow(dead_code, non_upper_case_globals)] pub const SRC_COLOR: types::GLenum = 0x0300; -#[allow(dead_code, non_upper_case_globals)] pub const SRGB: types::GLenum = 0x8C40; -#[allow(dead_code, non_upper_case_globals)] pub const SRGB8: types::GLenum = 0x8C41; -#[allow(dead_code, non_upper_case_globals)] pub const SRGB8_ALPHA8: types::GLenum = 0x8C43; -#[allow(dead_code, non_upper_case_globals)] pub const STATIC_COPY: types::GLenum = 0x88E6; -#[allow(dead_code, non_upper_case_globals)] pub const STATIC_DRAW: types::GLenum = 0x88E4; -#[allow(dead_code, non_upper_case_globals)] pub const STATIC_READ: types::GLenum = 0x88E5; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL: types::GLenum = 0x1802; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_ATTACHMENT: types::GLenum = 0x8D20; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_FAIL: types::GLenum = 0x8801; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_FUNC: types::GLenum = 0x8800; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_PASS_DEPTH_FAIL: types::GLenum = 0x8802; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_PASS_DEPTH_PASS: types::GLenum = 0x8803; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_REF: types::GLenum = 0x8CA3; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_VALUE_MASK: types::GLenum = 0x8CA4; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BACK_WRITEMASK: types::GLenum = 0x8CA5; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BITS: types::GLenum = 0x0D57; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_BUFFER_BIT: types::GLenum = 0x00000400; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_CLEAR_VALUE: types::GLenum = 0x0B91; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_FAIL: types::GLenum = 0x0B94; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_FUNC: types::GLenum = 0x0B92; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_INDEX8: types::GLenum = 0x8D48; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_PASS_DEPTH_FAIL: types::GLenum = 0x0B95; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_PASS_DEPTH_PASS: types::GLenum = 0x0B96; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_REF: types::GLenum = 0x0B97; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_TEST: types::GLenum = 0x0B90; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_VALUE_MASK: types::GLenum = 0x0B93; -#[allow(dead_code, non_upper_case_globals)] pub const STENCIL_WRITEMASK: types::GLenum = 0x0B98; -#[allow(dead_code, non_upper_case_globals)] pub const STREAM_COPY: types::GLenum = 0x88E2; -#[allow(dead_code, non_upper_case_globals)] pub const STREAM_DRAW: types::GLenum = 0x88E0; -#[allow(dead_code, non_upper_case_globals)] pub const STREAM_READ: types::GLenum = 0x88E1; -#[allow(dead_code, non_upper_case_globals)] pub const SUBPIXEL_BITS: types::GLenum = 0x0D50; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_CONDITION: types::GLenum = 0x9113; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_FENCE: types::GLenum = 0x9116; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_FLAGS: types::GLenum = 0x9115; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_FLUSH_COMMANDS_BIT: types::GLenum = 0x00000001; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_GPU_COMMANDS_COMPLETE: types::GLenum = 0x9117; -#[allow(dead_code, non_upper_case_globals)] pub const SYNC_STATUS: types::GLenum = 0x9114; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE: types::GLenum = 0x1702; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE0: types::GLenum = 0x84C0; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE1: types::GLenum = 0x84C1; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE10: types::GLenum = 0x84CA; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE11: types::GLenum = 0x84CB; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE12: types::GLenum = 0x84CC; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE13: types::GLenum = 0x84CD; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE14: types::GLenum = 0x84CE; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE15: types::GLenum = 0x84CF; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE16: types::GLenum = 0x84D0; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE17: types::GLenum = 0x84D1; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE18: types::GLenum = 0x84D2; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE19: types::GLenum = 0x84D3; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE2: types::GLenum = 0x84C2; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE20: types::GLenum = 0x84D4; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE21: types::GLenum = 0x84D5; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE22: types::GLenum = 0x84D6; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE23: types::GLenum = 0x84D7; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE24: types::GLenum = 0x84D8; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE25: types::GLenum = 0x84D9; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE26: types::GLenum = 0x84DA; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE27: types::GLenum = 0x84DB; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE28: types::GLenum = 0x84DC; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE29: types::GLenum = 0x84DD; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE3: types::GLenum = 0x84C3; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE30: types::GLenum = 0x84DE; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE31: types::GLenum = 0x84DF; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE4: types::GLenum = 0x84C4; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE5: types::GLenum = 0x84C5; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE6: types::GLenum = 0x84C6; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE7: types::GLenum = 0x84C7; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE8: types::GLenum = 0x84C8; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE9: types::GLenum = 0x84C9; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_2D: types::GLenum = 0x0DE1; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_2D_ARRAY: types::GLenum = 0x8C1A; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_3D: types::GLenum = 0x806F; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_BASE_LEVEL: types::GLenum = 0x813C; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_BINDING_2D: types::GLenum = 0x8069; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_BINDING_2D_ARRAY: types::GLenum = 0x8C1D; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_BINDING_3D: types::GLenum = 0x806A; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_BINDING_CUBE_MAP: types::GLenum = 0x8514; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_COMPARE_FUNC: types::GLenum = 0x884D; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_COMPARE_MODE: types::GLenum = 0x884C; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP: types::GLenum = 0x8513; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_NEGATIVE_X: types::GLenum = 0x8516; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_NEGATIVE_Y: types::GLenum = 0x8518; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_NEGATIVE_Z: types::GLenum = 0x851A; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_POSITIVE_X: types::GLenum = 0x8515; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_POSITIVE_Y: types::GLenum = 0x8517; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_CUBE_MAP_POSITIVE_Z: types::GLenum = 0x8519; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_IMMUTABLE_FORMAT: types::GLenum = 0x912F; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_IMMUTABLE_LEVELS: types::GLenum = 0x82DF; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_MAG_FILTER: types::GLenum = 0x2800; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_MAX_LEVEL: types::GLenum = 0x813D; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_MAX_LOD: types::GLenum = 0x813B; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_MIN_FILTER: types::GLenum = 0x2801; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_MIN_LOD: types::GLenum = 0x813A; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_SWIZZLE_A: types::GLenum = 0x8E45; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_SWIZZLE_B: types::GLenum = 0x8E44; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_SWIZZLE_G: types::GLenum = 0x8E43; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_SWIZZLE_R: types::GLenum = 0x8E42; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_WRAP_R: types::GLenum = 0x8072; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_WRAP_S: types::GLenum = 0x2802; -#[allow(dead_code, non_upper_case_globals)] pub const TEXTURE_WRAP_T: types::GLenum = 0x2803; -#[allow(dead_code, non_upper_case_globals)] pub const TIMEOUT_EXPIRED: types::GLenum = 0x911B; -#[allow(dead_code, non_upper_case_globals)] pub const TIMEOUT_IGNORED: types::GLuint64 = 0xFFFFFFFFFFFFFFFF; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK: types::GLenum = 0x8E22; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_ACTIVE: types::GLenum = 0x8E24; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BINDING: types::GLenum = 0x8E25; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BUFFER: types::GLenum = 0x8C8E; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BUFFER_BINDING: types::GLenum = 0x8C8F; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BUFFER_MODE: types::GLenum = 0x8C7F; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BUFFER_SIZE: types::GLenum = 0x8C85; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_BUFFER_START: types::GLenum = 0x8C84; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_PAUSED: types::GLenum = 0x8E23; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: types::GLenum = 0x8C88; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_VARYINGS: types::GLenum = 0x8C83; -#[allow(dead_code, non_upper_case_globals)] pub const TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: types::GLenum = 0x8C76; -#[allow(dead_code, non_upper_case_globals)] pub const TRIANGLES: types::GLenum = 0x0004; -#[allow(dead_code, non_upper_case_globals)] pub const TRIANGLE_FAN: types::GLenum = 0x0006; -#[allow(dead_code, non_upper_case_globals)] pub const TRIANGLE_STRIP: types::GLenum = 0x0005; -#[allow(dead_code, non_upper_case_globals)] pub const TRUE: types::GLboolean = 1; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_ARRAY_STRIDE: types::GLenum = 0x8A3C; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_ACTIVE_UNIFORMS: types::GLenum = 0x8A42; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: types::GLenum = 0x8A43; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_BINDING: types::GLenum = 0x8A3F; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_DATA_SIZE: types::GLenum = 0x8A40; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_INDEX: types::GLenum = 0x8A3A; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_NAME_LENGTH: types::GLenum = 0x8A41; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: types::GLenum = 0x8A46; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: types::GLenum = 0x8A44; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BUFFER: types::GLenum = 0x8A11; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BUFFER_BINDING: types::GLenum = 0x8A28; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BUFFER_OFFSET_ALIGNMENT: types::GLenum = 0x8A34; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BUFFER_SIZE: types::GLenum = 0x8A2A; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_BUFFER_START: types::GLenum = 0x8A29; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_IS_ROW_MAJOR: types::GLenum = 0x8A3E; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_MATRIX_STRIDE: types::GLenum = 0x8A3D; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_NAME_LENGTH: types::GLenum = 0x8A39; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_OFFSET: types::GLenum = 0x8A3B; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_SIZE: types::GLenum = 0x8A38; -#[allow(dead_code, non_upper_case_globals)] pub const UNIFORM_TYPE: types::GLenum = 0x8A37; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_ALIGNMENT: types::GLenum = 0x0CF5; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_IMAGE_HEIGHT: types::GLenum = 0x806E; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_ROW_LENGTH: types::GLenum = 0x0CF2; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_SKIP_IMAGES: types::GLenum = 0x806D; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_SKIP_PIXELS: types::GLenum = 0x0CF4; -#[allow(dead_code, non_upper_case_globals)] pub const UNPACK_SKIP_ROWS: types::GLenum = 0x0CF3; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNALED: types::GLenum = 0x9118; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_BYTE: types::GLenum = 0x1401; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT: types::GLenum = 0x1405; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_10F_11F_11F_REV: types::GLenum = 0x8C3B; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_24_8: types::GLenum = 0x84FA; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_2_10_10_10_REV: types::GLenum = 0x8368; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_5_9_9_9_REV: types::GLenum = 0x8C3E; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_SAMPLER_2D: types::GLenum = 0x8DD2; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_SAMPLER_2D_ARRAY: types::GLenum = 0x8DD7; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_SAMPLER_3D: types::GLenum = 0x8DD3; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_SAMPLER_CUBE: types::GLenum = 0x8DD4; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_VEC2: types::GLenum = 0x8DC6; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_VEC3: types::GLenum = 0x8DC7; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_INT_VEC4: types::GLenum = 0x8DC8; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_NORMALIZED: types::GLenum = 0x8C17; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_SHORT: types::GLenum = 0x1403; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_SHORT_4_4_4_4: types::GLenum = 0x8033; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_SHORT_5_5_5_1: types::GLenum = 0x8034; -#[allow(dead_code, non_upper_case_globals)] pub const UNSIGNED_SHORT_5_6_5: types::GLenum = 0x8363; -#[allow(dead_code, non_upper_case_globals)] pub const VALIDATE_STATUS: types::GLenum = 0x8B83; -#[allow(dead_code, non_upper_case_globals)] pub const VENDOR: types::GLenum = 0x1F00; -#[allow(dead_code, non_upper_case_globals)] pub const VERSION: types::GLenum = 0x1F02; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ARRAY_BINDING: types::GLenum = 0x85B5; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: types::GLenum = 0x889F; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_DIVISOR: types::GLenum = 0x88FE; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_ENABLED: types::GLenum = 0x8622; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_INTEGER: types::GLenum = 0x88FD; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_NORMALIZED: types::GLenum = 0x886A; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_POINTER: types::GLenum = 0x8645; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_SIZE: types::GLenum = 0x8623; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_STRIDE: types::GLenum = 0x8624; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_ATTRIB_ARRAY_TYPE: types::GLenum = 0x8625; -#[allow(dead_code, non_upper_case_globals)] pub const VERTEX_SHADER: types::GLenum = 0x8B31; -#[allow(dead_code, non_upper_case_globals)] pub const VIEWPORT: types::GLenum = 0x0BA2; -#[allow(dead_code, non_upper_case_globals)] pub const WAIT_FAILED: types::GLenum = 0x911D; -#[allow(dead_code, non_upper_case_globals)] pub const ZERO: types::GLenum = 0; - #[allow(dead_code, missing_copy_implementations)] - #[derive(Clone)] - pub struct FnPtr { - /// The function pointer that will be used when calling the function. - f: *const __gl_imports::raw::c_void, - /// True if the pointer points to a real function, false if points to a `panic!` fn. - is_loaded: bool, - } +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_ATTRIBUTES: types::GLenum = 0x8B89; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_ATTRIBUTE_MAX_LENGTH: types::GLenum = 0x8B8A; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_TEXTURE: types::GLenum = 0x84E0; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_UNIFORMS: types::GLenum = 0x8B86; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_UNIFORM_BLOCKS: types::GLenum = 0x8A36; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: types::GLenum = 0x8A35; +#[allow(dead_code, non_upper_case_globals)] +pub const ACTIVE_UNIFORM_MAX_LENGTH: types::GLenum = 0x8B87; +#[allow(dead_code, non_upper_case_globals)] +pub const ALIASED_LINE_WIDTH_RANGE: types::GLenum = 0x846E; +#[allow(dead_code, non_upper_case_globals)] +pub const ALIASED_POINT_SIZE_RANGE: types::GLenum = 0x846D; +#[allow(dead_code, non_upper_case_globals)] +pub const ALPHA: types::GLenum = 0x1906; +#[allow(dead_code, non_upper_case_globals)] +pub const ALPHA_BITS: types::GLenum = 0x0D55; +#[allow(dead_code, non_upper_case_globals)] +pub const ALREADY_SIGNALED: types::GLenum = 0x911A; +#[allow(dead_code, non_upper_case_globals)] +pub const ALWAYS: types::GLenum = 0x0207; +#[allow(dead_code, non_upper_case_globals)] +pub const ANY_SAMPLES_PASSED: types::GLenum = 0x8C2F; +#[allow(dead_code, non_upper_case_globals)] +pub const ANY_SAMPLES_PASSED_CONSERVATIVE: types::GLenum = 0x8D6A; +#[allow(dead_code, non_upper_case_globals)] +pub const ARRAY_BUFFER: types::GLenum = 0x8892; +#[allow(dead_code, non_upper_case_globals)] +pub const ARRAY_BUFFER_BINDING: types::GLenum = 0x8894; +#[allow(dead_code, non_upper_case_globals)] +pub const ATTACHED_SHADERS: types::GLenum = 0x8B85; +#[allow(dead_code, non_upper_case_globals)] +pub const BACK: types::GLenum = 0x0405; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND: types::GLenum = 0x0BE2; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_COLOR: types::GLenum = 0x8005; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_DST_ALPHA: types::GLenum = 0x80CA; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_DST_RGB: types::GLenum = 0x80C8; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_EQUATION: types::GLenum = 0x8009; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_EQUATION_ALPHA: types::GLenum = 0x883D; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_EQUATION_RGB: types::GLenum = 0x8009; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_SRC_ALPHA: types::GLenum = 0x80CB; +#[allow(dead_code, non_upper_case_globals)] +pub const BLEND_SRC_RGB: types::GLenum = 0x80C9; +#[allow(dead_code, non_upper_case_globals)] +pub const BLUE: types::GLenum = 0x1905; +#[allow(dead_code, non_upper_case_globals)] +pub const BLUE_BITS: types::GLenum = 0x0D54; +#[allow(dead_code, non_upper_case_globals)] +pub const BOOL: types::GLenum = 0x8B56; +#[allow(dead_code, non_upper_case_globals)] +pub const BOOL_VEC2: types::GLenum = 0x8B57; +#[allow(dead_code, non_upper_case_globals)] +pub const BOOL_VEC3: types::GLenum = 0x8B58; +#[allow(dead_code, non_upper_case_globals)] +pub const BOOL_VEC4: types::GLenum = 0x8B59; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_ACCESS_FLAGS: types::GLenum = 0x911F; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_MAPPED: types::GLenum = 0x88BC; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_MAP_LENGTH: types::GLenum = 0x9120; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_MAP_OFFSET: types::GLenum = 0x9121; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_MAP_POINTER: types::GLenum = 0x88BD; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_SIZE: types::GLenum = 0x8764; +#[allow(dead_code, non_upper_case_globals)] +pub const BUFFER_USAGE: types::GLenum = 0x8765; +#[allow(dead_code, non_upper_case_globals)] +pub const BYTE: types::GLenum = 0x1400; +#[allow(dead_code, non_upper_case_globals)] +pub const CCW: types::GLenum = 0x0901; +#[allow(dead_code, non_upper_case_globals)] +pub const CLAMP_TO_EDGE: types::GLenum = 0x812F; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR: types::GLenum = 0x1800; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT0: types::GLenum = 0x8CE0; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT1: types::GLenum = 0x8CE1; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT10: types::GLenum = 0x8CEA; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT11: types::GLenum = 0x8CEB; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT12: types::GLenum = 0x8CEC; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT13: types::GLenum = 0x8CED; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT14: types::GLenum = 0x8CEE; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT15: types::GLenum = 0x8CEF; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT16: types::GLenum = 0x8CF0; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT17: types::GLenum = 0x8CF1; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT18: types::GLenum = 0x8CF2; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT19: types::GLenum = 0x8CF3; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT2: types::GLenum = 0x8CE2; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT20: types::GLenum = 0x8CF4; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT21: types::GLenum = 0x8CF5; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT22: types::GLenum = 0x8CF6; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT23: types::GLenum = 0x8CF7; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT24: types::GLenum = 0x8CF8; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT25: types::GLenum = 0x8CF9; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT26: types::GLenum = 0x8CFA; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT27: types::GLenum = 0x8CFB; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT28: types::GLenum = 0x8CFC; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT29: types::GLenum = 0x8CFD; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT3: types::GLenum = 0x8CE3; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT30: types::GLenum = 0x8CFE; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT31: types::GLenum = 0x8CFF; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT4: types::GLenum = 0x8CE4; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT5: types::GLenum = 0x8CE5; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT6: types::GLenum = 0x8CE6; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT7: types::GLenum = 0x8CE7; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT8: types::GLenum = 0x8CE8; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_ATTACHMENT9: types::GLenum = 0x8CE9; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_BUFFER_BIT: types::GLenum = 0x00004000; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_CLEAR_VALUE: types::GLenum = 0x0C22; +#[allow(dead_code, non_upper_case_globals)] +pub const COLOR_WRITEMASK: types::GLenum = 0x0C23; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPARE_REF_TO_TEXTURE: types::GLenum = 0x884E; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPILE_STATUS: types::GLenum = 0x8B81; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_R11_EAC: types::GLenum = 0x9270; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_RG11_EAC: types::GLenum = 0x9272; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_RGB8_ETC2: types::GLenum = 0x9274; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: types::GLenum = 0x9276; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_RGBA8_ETC2_EAC: types::GLenum = 0x9278; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_SIGNED_R11_EAC: types::GLenum = 0x9271; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_SIGNED_RG11_EAC: types::GLenum = 0x9273; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: types::GLenum = 0x9279; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_SRGB8_ETC2: types::GLenum = 0x9275; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: types::GLenum = 0x9277; +#[allow(dead_code, non_upper_case_globals)] +pub const COMPRESSED_TEXTURE_FORMATS: types::GLenum = 0x86A3; +#[allow(dead_code, non_upper_case_globals)] +pub const CONDITION_SATISFIED: types::GLenum = 0x911C; +#[allow(dead_code, non_upper_case_globals)] +pub const CONSTANT_ALPHA: types::GLenum = 0x8003; +#[allow(dead_code, non_upper_case_globals)] +pub const CONSTANT_COLOR: types::GLenum = 0x8001; +#[allow(dead_code, non_upper_case_globals)] +pub const COPY_READ_BUFFER: types::GLenum = 0x8F36; +#[allow(dead_code, non_upper_case_globals)] +pub const COPY_READ_BUFFER_BINDING: types::GLenum = 0x8F36; +#[allow(dead_code, non_upper_case_globals)] +pub const COPY_WRITE_BUFFER: types::GLenum = 0x8F37; +#[allow(dead_code, non_upper_case_globals)] +pub const COPY_WRITE_BUFFER_BINDING: types::GLenum = 0x8F37; +#[allow(dead_code, non_upper_case_globals)] +pub const CULL_FACE: types::GLenum = 0x0B44; +#[allow(dead_code, non_upper_case_globals)] +pub const CULL_FACE_MODE: types::GLenum = 0x0B45; +#[allow(dead_code, non_upper_case_globals)] +pub const CURRENT_PROGRAM: types::GLenum = 0x8B8D; +#[allow(dead_code, non_upper_case_globals)] +pub const CURRENT_QUERY: types::GLenum = 0x8865; +#[allow(dead_code, non_upper_case_globals)] +pub const CURRENT_VERTEX_ATTRIB: types::GLenum = 0x8626; +#[allow(dead_code, non_upper_case_globals)] +pub const CW: types::GLenum = 0x0900; +#[allow(dead_code, non_upper_case_globals)] +pub const DECR: types::GLenum = 0x1E03; +#[allow(dead_code, non_upper_case_globals)] +pub const DECR_WRAP: types::GLenum = 0x8508; +#[allow(dead_code, non_upper_case_globals)] +pub const DELETE_STATUS: types::GLenum = 0x8B80; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH: types::GLenum = 0x1801; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH24_STENCIL8: types::GLenum = 0x88F0; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH32F_STENCIL8: types::GLenum = 0x8CAD; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_ATTACHMENT: types::GLenum = 0x8D00; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_BITS: types::GLenum = 0x0D56; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_BUFFER_BIT: types::GLenum = 0x00000100; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_CLEAR_VALUE: types::GLenum = 0x0B73; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_COMPONENT: types::GLenum = 0x1902; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_COMPONENT16: types::GLenum = 0x81A5; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_COMPONENT24: types::GLenum = 0x81A6; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_COMPONENT32F: types::GLenum = 0x8CAC; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_FUNC: types::GLenum = 0x0B74; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_RANGE: types::GLenum = 0x0B70; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_STENCIL: types::GLenum = 0x84F9; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_STENCIL_ATTACHMENT: types::GLenum = 0x821A; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_TEST: types::GLenum = 0x0B71; +#[allow(dead_code, non_upper_case_globals)] +pub const DEPTH_WRITEMASK: types::GLenum = 0x0B72; +#[allow(dead_code, non_upper_case_globals)] +pub const DITHER: types::GLenum = 0x0BD0; +#[allow(dead_code, non_upper_case_globals)] +pub const DONT_CARE: types::GLenum = 0x1100; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER0: types::GLenum = 0x8825; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER1: types::GLenum = 0x8826; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER10: types::GLenum = 0x882F; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER11: types::GLenum = 0x8830; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER12: types::GLenum = 0x8831; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER13: types::GLenum = 0x8832; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER14: types::GLenum = 0x8833; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER15: types::GLenum = 0x8834; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER2: types::GLenum = 0x8827; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER3: types::GLenum = 0x8828; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER4: types::GLenum = 0x8829; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER5: types::GLenum = 0x882A; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER6: types::GLenum = 0x882B; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER7: types::GLenum = 0x882C; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER8: types::GLenum = 0x882D; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_BUFFER9: types::GLenum = 0x882E; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_FRAMEBUFFER: types::GLenum = 0x8CA9; +#[allow(dead_code, non_upper_case_globals)] +pub const DRAW_FRAMEBUFFER_BINDING: types::GLenum = 0x8CA6; +#[allow(dead_code, non_upper_case_globals)] +pub const DST_ALPHA: types::GLenum = 0x0304; +#[allow(dead_code, non_upper_case_globals)] +pub const DST_COLOR: types::GLenum = 0x0306; +#[allow(dead_code, non_upper_case_globals)] +pub const DYNAMIC_COPY: types::GLenum = 0x88EA; +#[allow(dead_code, non_upper_case_globals)] +pub const DYNAMIC_DRAW: types::GLenum = 0x88E8; +#[allow(dead_code, non_upper_case_globals)] +pub const DYNAMIC_READ: types::GLenum = 0x88E9; +#[allow(dead_code, non_upper_case_globals)] +pub const ELEMENT_ARRAY_BUFFER: types::GLenum = 0x8893; +#[allow(dead_code, non_upper_case_globals)] +pub const ELEMENT_ARRAY_BUFFER_BINDING: types::GLenum = 0x8895; +#[allow(dead_code, non_upper_case_globals)] +pub const EQUAL: types::GLenum = 0x0202; +#[allow(dead_code, non_upper_case_globals)] +pub const EXTENSIONS: types::GLenum = 0x1F03; +#[allow(dead_code, non_upper_case_globals)] +pub const FALSE: types::GLboolean = 0; +#[allow(dead_code, non_upper_case_globals)] +pub const FASTEST: types::GLenum = 0x1101; +#[allow(dead_code, non_upper_case_globals)] +pub const FIXED: types::GLenum = 0x140C; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT: types::GLenum = 0x1406; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_32_UNSIGNED_INT_24_8_REV: types::GLenum = 0x8DAD; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT2: types::GLenum = 0x8B5A; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT2x3: types::GLenum = 0x8B65; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT2x4: types::GLenum = 0x8B66; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT3: types::GLenum = 0x8B5B; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT3x2: types::GLenum = 0x8B67; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT3x4: types::GLenum = 0x8B68; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT4: types::GLenum = 0x8B5C; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT4x2: types::GLenum = 0x8B69; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_MAT4x3: types::GLenum = 0x8B6A; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_VEC2: types::GLenum = 0x8B50; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_VEC3: types::GLenum = 0x8B51; +#[allow(dead_code, non_upper_case_globals)] +pub const FLOAT_VEC4: types::GLenum = 0x8B52; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAGMENT_SHADER: types::GLenum = 0x8B30; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAGMENT_SHADER_DERIVATIVE_HINT: types::GLenum = 0x8B8B; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER: types::GLenum = 0x8D40; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: types::GLenum = 0x8215; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: types::GLenum = 0x8214; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: types::GLenum = 0x8210; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: types::GLenum = 0x8211; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: types::GLenum = 0x8216; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: types::GLenum = 0x8213; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: types::GLenum = 0x8CD1; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: types::GLenum = 0x8CD0; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_RED_SIZE: types::GLenum = 0x8212; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: types::GLenum = 0x8217; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: types::GLenum = 0x8CD3; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: types::GLenum = 0x8CD4; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: types::GLenum = 0x8CD2; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_BINDING: types::GLenum = 0x8CA6; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_COMPLETE: types::GLenum = 0x8CD5; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_DEFAULT: types::GLenum = 0x8218; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_INCOMPLETE_ATTACHMENT: types::GLenum = 0x8CD6; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_INCOMPLETE_DIMENSIONS: types::GLenum = 0x8CD9; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: types::GLenum = 0x8CD7; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: types::GLenum = 0x8D56; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_UNDEFINED: types::GLenum = 0x8219; +#[allow(dead_code, non_upper_case_globals)] +pub const FRAMEBUFFER_UNSUPPORTED: types::GLenum = 0x8CDD; +#[allow(dead_code, non_upper_case_globals)] +pub const FRONT: types::GLenum = 0x0404; +#[allow(dead_code, non_upper_case_globals)] +pub const FRONT_AND_BACK: types::GLenum = 0x0408; +#[allow(dead_code, non_upper_case_globals)] +pub const FRONT_FACE: types::GLenum = 0x0B46; +#[allow(dead_code, non_upper_case_globals)] +pub const FUNC_ADD: types::GLenum = 0x8006; +#[allow(dead_code, non_upper_case_globals)] +pub const FUNC_REVERSE_SUBTRACT: types::GLenum = 0x800B; +#[allow(dead_code, non_upper_case_globals)] +pub const FUNC_SUBTRACT: types::GLenum = 0x800A; +#[allow(dead_code, non_upper_case_globals)] +pub const GENERATE_MIPMAP_HINT: types::GLenum = 0x8192; +#[allow(dead_code, non_upper_case_globals)] +pub const GEQUAL: types::GLenum = 0x0206; +#[allow(dead_code, non_upper_case_globals)] +pub const GREATER: types::GLenum = 0x0204; +#[allow(dead_code, non_upper_case_globals)] +pub const GREEN: types::GLenum = 0x1904; +#[allow(dead_code, non_upper_case_globals)] +pub const GREEN_BITS: types::GLenum = 0x0D53; +#[allow(dead_code, non_upper_case_globals)] +pub const HALF_FLOAT: types::GLenum = 0x140B; +#[allow(dead_code, non_upper_case_globals)] +pub const HIGH_FLOAT: types::GLenum = 0x8DF2; +#[allow(dead_code, non_upper_case_globals)] +pub const HIGH_INT: types::GLenum = 0x8DF5; +#[allow(dead_code, non_upper_case_globals)] +pub const IMPLEMENTATION_COLOR_READ_FORMAT: types::GLenum = 0x8B9B; +#[allow(dead_code, non_upper_case_globals)] +pub const IMPLEMENTATION_COLOR_READ_TYPE: types::GLenum = 0x8B9A; +#[allow(dead_code, non_upper_case_globals)] +pub const INCR: types::GLenum = 0x1E02; +#[allow(dead_code, non_upper_case_globals)] +pub const INCR_WRAP: types::GLenum = 0x8507; +#[allow(dead_code, non_upper_case_globals)] +pub const INFO_LOG_LENGTH: types::GLenum = 0x8B84; +#[allow(dead_code, non_upper_case_globals)] +pub const INT: types::GLenum = 0x1404; +#[allow(dead_code, non_upper_case_globals)] +pub const INTERLEAVED_ATTRIBS: types::GLenum = 0x8C8C; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_2_10_10_10_REV: types::GLenum = 0x8D9F; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_SAMPLER_2D: types::GLenum = 0x8DCA; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_SAMPLER_2D_ARRAY: types::GLenum = 0x8DCF; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_SAMPLER_3D: types::GLenum = 0x8DCB; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_SAMPLER_CUBE: types::GLenum = 0x8DCC; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_VEC2: types::GLenum = 0x8B53; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_VEC3: types::GLenum = 0x8B54; +#[allow(dead_code, non_upper_case_globals)] +pub const INT_VEC4: types::GLenum = 0x8B55; +#[allow(dead_code, non_upper_case_globals)] +pub const INVALID_ENUM: types::GLenum = 0x0500; +#[allow(dead_code, non_upper_case_globals)] +pub const INVALID_FRAMEBUFFER_OPERATION: types::GLenum = 0x0506; +#[allow(dead_code, non_upper_case_globals)] +pub const INVALID_INDEX: types::GLuint = 0xFFFFFFFF; +#[allow(dead_code, non_upper_case_globals)] +pub const INVALID_OPERATION: types::GLenum = 0x0502; +#[allow(dead_code, non_upper_case_globals)] +pub const INVALID_VALUE: types::GLenum = 0x0501; +#[allow(dead_code, non_upper_case_globals)] +pub const INVERT: types::GLenum = 0x150A; +#[allow(dead_code, non_upper_case_globals)] +pub const KEEP: types::GLenum = 0x1E00; +#[allow(dead_code, non_upper_case_globals)] +pub const LEQUAL: types::GLenum = 0x0203; +#[allow(dead_code, non_upper_case_globals)] +pub const LESS: types::GLenum = 0x0201; +#[allow(dead_code, non_upper_case_globals)] +pub const LINEAR: types::GLenum = 0x2601; +#[allow(dead_code, non_upper_case_globals)] +pub const LINEAR_MIPMAP_LINEAR: types::GLenum = 0x2703; +#[allow(dead_code, non_upper_case_globals)] +pub const LINEAR_MIPMAP_NEAREST: types::GLenum = 0x2701; +#[allow(dead_code, non_upper_case_globals)] +pub const LINES: types::GLenum = 0x0001; +#[allow(dead_code, non_upper_case_globals)] +pub const LINE_LOOP: types::GLenum = 0x0002; +#[allow(dead_code, non_upper_case_globals)] +pub const LINE_STRIP: types::GLenum = 0x0003; +#[allow(dead_code, non_upper_case_globals)] +pub const LINE_WIDTH: types::GLenum = 0x0B21; +#[allow(dead_code, non_upper_case_globals)] +pub const LINK_STATUS: types::GLenum = 0x8B82; +#[allow(dead_code, non_upper_case_globals)] +pub const LOW_FLOAT: types::GLenum = 0x8DF0; +#[allow(dead_code, non_upper_case_globals)] +pub const LOW_INT: types::GLenum = 0x8DF3; +#[allow(dead_code, non_upper_case_globals)] +pub const LUMINANCE: types::GLenum = 0x1909; +#[allow(dead_code, non_upper_case_globals)] +pub const LUMINANCE_ALPHA: types::GLenum = 0x190A; +#[allow(dead_code, non_upper_case_globals)] +pub const MAJOR_VERSION: types::GLenum = 0x821B; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_FLUSH_EXPLICIT_BIT: types::GLenum = 0x0010; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_INVALIDATE_BUFFER_BIT: types::GLenum = 0x0008; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_INVALIDATE_RANGE_BIT: types::GLenum = 0x0004; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_READ_BIT: types::GLenum = 0x0001; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_UNSYNCHRONIZED_BIT: types::GLenum = 0x0020; +#[allow(dead_code, non_upper_case_globals)] +pub const MAP_WRITE_BIT: types::GLenum = 0x0002; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX: types::GLenum = 0x8008; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_3D_TEXTURE_SIZE: types::GLenum = 0x8073; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_ARRAY_TEXTURE_LAYERS: types::GLenum = 0x88FF; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_COLOR_ATTACHMENTS: types::GLenum = 0x8CDF; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: types::GLenum = 0x8A33; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_COMBINED_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8B4D; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_COMBINED_UNIFORM_BLOCKS: types::GLenum = 0x8A2E; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: types::GLenum = 0x8A31; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_CUBE_MAP_TEXTURE_SIZE: types::GLenum = 0x851C; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_DRAW_BUFFERS: types::GLenum = 0x8824; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_ELEMENTS_INDICES: types::GLenum = 0x80E9; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_ELEMENTS_VERTICES: types::GLenum = 0x80E8; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_ELEMENT_INDEX: types::GLenum = 0x8D6B; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_FRAGMENT_INPUT_COMPONENTS: types::GLenum = 0x9125; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_FRAGMENT_UNIFORM_BLOCKS: types::GLenum = 0x8A2D; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_FRAGMENT_UNIFORM_COMPONENTS: types::GLenum = 0x8B49; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_FRAGMENT_UNIFORM_VECTORS: types::GLenum = 0x8DFD; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_PROGRAM_TEXEL_OFFSET: types::GLenum = 0x8905; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_RENDERBUFFER_SIZE: types::GLenum = 0x84E8; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_SAMPLES: types::GLenum = 0x8D57; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_SERVER_WAIT_TIMEOUT: types::GLenum = 0x9111; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8872; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TEXTURE_LOD_BIAS: types::GLenum = 0x84FD; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TEXTURE_SIZE: types::GLenum = 0x0D33; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: types::GLenum = 0x8C8A; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: types::GLenum = 0x8C8B; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: types::GLenum = 0x8C80; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_UNIFORM_BLOCK_SIZE: types::GLenum = 0x8A30; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_UNIFORM_BUFFER_BINDINGS: types::GLenum = 0x8A2F; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VARYING_COMPONENTS: types::GLenum = 0x8B4B; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VARYING_VECTORS: types::GLenum = 0x8DFC; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_ATTRIBS: types::GLenum = 0x8869; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_OUTPUT_COMPONENTS: types::GLenum = 0x9122; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_TEXTURE_IMAGE_UNITS: types::GLenum = 0x8B4C; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_UNIFORM_BLOCKS: types::GLenum = 0x8A2B; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_UNIFORM_COMPONENTS: types::GLenum = 0x8B4A; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VERTEX_UNIFORM_VECTORS: types::GLenum = 0x8DFB; +#[allow(dead_code, non_upper_case_globals)] +pub const MAX_VIEWPORT_DIMS: types::GLenum = 0x0D3A; +#[allow(dead_code, non_upper_case_globals)] +pub const MEDIUM_FLOAT: types::GLenum = 0x8DF1; +#[allow(dead_code, non_upper_case_globals)] +pub const MEDIUM_INT: types::GLenum = 0x8DF4; +#[allow(dead_code, non_upper_case_globals)] +pub const MIN: types::GLenum = 0x8007; +#[allow(dead_code, non_upper_case_globals)] +pub const MINOR_VERSION: types::GLenum = 0x821C; +#[allow(dead_code, non_upper_case_globals)] +pub const MIN_PROGRAM_TEXEL_OFFSET: types::GLenum = 0x8904; +#[allow(dead_code, non_upper_case_globals)] +pub const MIRRORED_REPEAT: types::GLenum = 0x8370; +#[allow(dead_code, non_upper_case_globals)] +pub const NEAREST: types::GLenum = 0x2600; +#[allow(dead_code, non_upper_case_globals)] +pub const NEAREST_MIPMAP_LINEAR: types::GLenum = 0x2702; +#[allow(dead_code, non_upper_case_globals)] +pub const NEAREST_MIPMAP_NEAREST: types::GLenum = 0x2700; +#[allow(dead_code, non_upper_case_globals)] +pub const NEVER: types::GLenum = 0x0200; +#[allow(dead_code, non_upper_case_globals)] +pub const NICEST: types::GLenum = 0x1102; +#[allow(dead_code, non_upper_case_globals)] +pub const NONE: types::GLenum = 0; +#[allow(dead_code, non_upper_case_globals)] +pub const NOTEQUAL: types::GLenum = 0x0205; +#[allow(dead_code, non_upper_case_globals)] +pub const NO_ERROR: types::GLenum = 0; +#[allow(dead_code, non_upper_case_globals)] +pub const NUM_COMPRESSED_TEXTURE_FORMATS: types::GLenum = 0x86A2; +#[allow(dead_code, non_upper_case_globals)] +pub const NUM_EXTENSIONS: types::GLenum = 0x821D; +#[allow(dead_code, non_upper_case_globals)] +pub const NUM_PROGRAM_BINARY_FORMATS: types::GLenum = 0x87FE; +#[allow(dead_code, non_upper_case_globals)] +pub const NUM_SAMPLE_COUNTS: types::GLenum = 0x9380; +#[allow(dead_code, non_upper_case_globals)] +pub const NUM_SHADER_BINARY_FORMATS: types::GLenum = 0x8DF9; +#[allow(dead_code, non_upper_case_globals)] +pub const OBJECT_TYPE: types::GLenum = 0x9112; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE: types::GLenum = 1; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_CONSTANT_ALPHA: types::GLenum = 0x8004; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_CONSTANT_COLOR: types::GLenum = 0x8002; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_DST_ALPHA: types::GLenum = 0x0305; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_DST_COLOR: types::GLenum = 0x0307; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_SRC_ALPHA: types::GLenum = 0x0303; +#[allow(dead_code, non_upper_case_globals)] +pub const ONE_MINUS_SRC_COLOR: types::GLenum = 0x0301; +#[allow(dead_code, non_upper_case_globals)] +pub const OUT_OF_MEMORY: types::GLenum = 0x0505; +#[allow(dead_code, non_upper_case_globals)] +pub const PACK_ALIGNMENT: types::GLenum = 0x0D05; +#[allow(dead_code, non_upper_case_globals)] +pub const PACK_ROW_LENGTH: types::GLenum = 0x0D02; +#[allow(dead_code, non_upper_case_globals)] +pub const PACK_SKIP_PIXELS: types::GLenum = 0x0D04; +#[allow(dead_code, non_upper_case_globals)] +pub const PACK_SKIP_ROWS: types::GLenum = 0x0D03; +#[allow(dead_code, non_upper_case_globals)] +pub const PIXEL_PACK_BUFFER: types::GLenum = 0x88EB; +#[allow(dead_code, non_upper_case_globals)] +pub const PIXEL_PACK_BUFFER_BINDING: types::GLenum = 0x88ED; +#[allow(dead_code, non_upper_case_globals)] +pub const PIXEL_UNPACK_BUFFER: types::GLenum = 0x88EC; +#[allow(dead_code, non_upper_case_globals)] +pub const PIXEL_UNPACK_BUFFER_BINDING: types::GLenum = 0x88EF; +#[allow(dead_code, non_upper_case_globals)] +pub const POINTS: types::GLenum = 0x0000; +#[allow(dead_code, non_upper_case_globals)] +pub const POLYGON_OFFSET_FACTOR: types::GLenum = 0x8038; +#[allow(dead_code, non_upper_case_globals)] +pub const POLYGON_OFFSET_FILL: types::GLenum = 0x8037; +#[allow(dead_code, non_upper_case_globals)] +pub const POLYGON_OFFSET_UNITS: types::GLenum = 0x2A00; +#[allow(dead_code, non_upper_case_globals)] +pub const PRIMITIVE_RESTART_FIXED_INDEX: types::GLenum = 0x8D69; +#[allow(dead_code, non_upper_case_globals)] +pub const PROGRAM_BINARY_FORMATS: types::GLenum = 0x87FF; +#[allow(dead_code, non_upper_case_globals)] +pub const PROGRAM_BINARY_LENGTH: types::GLenum = 0x8741; +#[allow(dead_code, non_upper_case_globals)] +pub const PROGRAM_BINARY_RETRIEVABLE_HINT: types::GLenum = 0x8257; +#[allow(dead_code, non_upper_case_globals)] +pub const QUERY_RESULT: types::GLenum = 0x8866; +#[allow(dead_code, non_upper_case_globals)] +pub const QUERY_RESULT_AVAILABLE: types::GLenum = 0x8867; +#[allow(dead_code, non_upper_case_globals)] +pub const R11F_G11F_B10F: types::GLenum = 0x8C3A; +#[allow(dead_code, non_upper_case_globals)] +pub const R16F: types::GLenum = 0x822D; +#[allow(dead_code, non_upper_case_globals)] +pub const R16I: types::GLenum = 0x8233; +#[allow(dead_code, non_upper_case_globals)] +pub const R16UI: types::GLenum = 0x8234; +#[allow(dead_code, non_upper_case_globals)] +pub const R32F: types::GLenum = 0x822E; +#[allow(dead_code, non_upper_case_globals)] +pub const R32I: types::GLenum = 0x8235; +#[allow(dead_code, non_upper_case_globals)] +pub const R32UI: types::GLenum = 0x8236; +#[allow(dead_code, non_upper_case_globals)] +pub const R8: types::GLenum = 0x8229; +#[allow(dead_code, non_upper_case_globals)] +pub const R8I: types::GLenum = 0x8231; +#[allow(dead_code, non_upper_case_globals)] +pub const R8UI: types::GLenum = 0x8232; +#[allow(dead_code, non_upper_case_globals)] +pub const R8_SNORM: types::GLenum = 0x8F94; +#[allow(dead_code, non_upper_case_globals)] +pub const RASTERIZER_DISCARD: types::GLenum = 0x8C89; +#[allow(dead_code, non_upper_case_globals)] +pub const READ_BUFFER: types::GLenum = 0x0C02; +#[allow(dead_code, non_upper_case_globals)] +pub const READ_FRAMEBUFFER: types::GLenum = 0x8CA8; +#[allow(dead_code, non_upper_case_globals)] +pub const READ_FRAMEBUFFER_BINDING: types::GLenum = 0x8CAA; +#[allow(dead_code, non_upper_case_globals)] +pub const RED: types::GLenum = 0x1903; +#[allow(dead_code, non_upper_case_globals)] +pub const RED_BITS: types::GLenum = 0x0D52; +#[allow(dead_code, non_upper_case_globals)] +pub const RED_INTEGER: types::GLenum = 0x8D94; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER: types::GLenum = 0x8D41; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_ALPHA_SIZE: types::GLenum = 0x8D53; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_BINDING: types::GLenum = 0x8CA7; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_BLUE_SIZE: types::GLenum = 0x8D52; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_DEPTH_SIZE: types::GLenum = 0x8D54; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_GREEN_SIZE: types::GLenum = 0x8D51; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_HEIGHT: types::GLenum = 0x8D43; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_INTERNAL_FORMAT: types::GLenum = 0x8D44; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_RED_SIZE: types::GLenum = 0x8D50; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_SAMPLES: types::GLenum = 0x8CAB; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_STENCIL_SIZE: types::GLenum = 0x8D55; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERBUFFER_WIDTH: types::GLenum = 0x8D42; +#[allow(dead_code, non_upper_case_globals)] +pub const RENDERER: types::GLenum = 0x1F01; +#[allow(dead_code, non_upper_case_globals)] +pub const REPEAT: types::GLenum = 0x2901; +#[allow(dead_code, non_upper_case_globals)] +pub const REPLACE: types::GLenum = 0x1E01; +#[allow(dead_code, non_upper_case_globals)] +pub const RG: types::GLenum = 0x8227; +#[allow(dead_code, non_upper_case_globals)] +pub const RG16F: types::GLenum = 0x822F; +#[allow(dead_code, non_upper_case_globals)] +pub const RG16I: types::GLenum = 0x8239; +#[allow(dead_code, non_upper_case_globals)] +pub const RG16UI: types::GLenum = 0x823A; +#[allow(dead_code, non_upper_case_globals)] +pub const RG32F: types::GLenum = 0x8230; +#[allow(dead_code, non_upper_case_globals)] +pub const RG32I: types::GLenum = 0x823B; +#[allow(dead_code, non_upper_case_globals)] +pub const RG32UI: types::GLenum = 0x823C; +#[allow(dead_code, non_upper_case_globals)] +pub const RG8: types::GLenum = 0x822B; +#[allow(dead_code, non_upper_case_globals)] +pub const RG8I: types::GLenum = 0x8237; +#[allow(dead_code, non_upper_case_globals)] +pub const RG8UI: types::GLenum = 0x8238; +#[allow(dead_code, non_upper_case_globals)] +pub const RG8_SNORM: types::GLenum = 0x8F95; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB: types::GLenum = 0x1907; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB10_A2: types::GLenum = 0x8059; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB10_A2UI: types::GLenum = 0x906F; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB16F: types::GLenum = 0x881B; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB16I: types::GLenum = 0x8D89; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB16UI: types::GLenum = 0x8D77; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB32F: types::GLenum = 0x8815; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB32I: types::GLenum = 0x8D83; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB32UI: types::GLenum = 0x8D71; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB565: types::GLenum = 0x8D62; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB5_A1: types::GLenum = 0x8057; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB8: types::GLenum = 0x8051; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB8I: types::GLenum = 0x8D8F; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB8UI: types::GLenum = 0x8D7D; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB8_SNORM: types::GLenum = 0x8F96; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB9_E5: types::GLenum = 0x8C3D; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA: types::GLenum = 0x1908; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA16F: types::GLenum = 0x881A; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA16I: types::GLenum = 0x8D88; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA16UI: types::GLenum = 0x8D76; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA32F: types::GLenum = 0x8814; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA32I: types::GLenum = 0x8D82; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA32UI: types::GLenum = 0x8D70; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA4: types::GLenum = 0x8056; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA8: types::GLenum = 0x8058; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA8I: types::GLenum = 0x8D8E; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA8UI: types::GLenum = 0x8D7C; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA8_SNORM: types::GLenum = 0x8F97; +#[allow(dead_code, non_upper_case_globals)] +pub const RGBA_INTEGER: types::GLenum = 0x8D99; +#[allow(dead_code, non_upper_case_globals)] +pub const RGB_INTEGER: types::GLenum = 0x8D98; +#[allow(dead_code, non_upper_case_globals)] +pub const RG_INTEGER: types::GLenum = 0x8228; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_2D: types::GLenum = 0x8B5E; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_2D_ARRAY: types::GLenum = 0x8DC1; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_2D_ARRAY_SHADOW: types::GLenum = 0x8DC4; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_2D_SHADOW: types::GLenum = 0x8B62; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_3D: types::GLenum = 0x8B5F; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_BINDING: types::GLenum = 0x8919; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_CUBE: types::GLenum = 0x8B60; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLER_CUBE_SHADOW: types::GLenum = 0x8DC5; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLES: types::GLenum = 0x80A9; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLE_ALPHA_TO_COVERAGE: types::GLenum = 0x809E; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLE_BUFFERS: types::GLenum = 0x80A8; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLE_COVERAGE: types::GLenum = 0x80A0; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLE_COVERAGE_INVERT: types::GLenum = 0x80AB; +#[allow(dead_code, non_upper_case_globals)] +pub const SAMPLE_COVERAGE_VALUE: types::GLenum = 0x80AA; +#[allow(dead_code, non_upper_case_globals)] +pub const SCISSOR_BOX: types::GLenum = 0x0C10; +#[allow(dead_code, non_upper_case_globals)] +pub const SCISSOR_TEST: types::GLenum = 0x0C11; +#[allow(dead_code, non_upper_case_globals)] +pub const SEPARATE_ATTRIBS: types::GLenum = 0x8C8D; +#[allow(dead_code, non_upper_case_globals)] +pub const SHADER_BINARY_FORMATS: types::GLenum = 0x8DF8; +#[allow(dead_code, non_upper_case_globals)] +pub const SHADER_COMPILER: types::GLenum = 0x8DFA; +#[allow(dead_code, non_upper_case_globals)] +pub const SHADER_SOURCE_LENGTH: types::GLenum = 0x8B88; +#[allow(dead_code, non_upper_case_globals)] +pub const SHADER_TYPE: types::GLenum = 0x8B4F; +#[allow(dead_code, non_upper_case_globals)] +pub const SHADING_LANGUAGE_VERSION: types::GLenum = 0x8B8C; +#[allow(dead_code, non_upper_case_globals)] +pub const SHORT: types::GLenum = 0x1402; +#[allow(dead_code, non_upper_case_globals)] +pub const SIGNALED: types::GLenum = 0x9119; +#[allow(dead_code, non_upper_case_globals)] +pub const SIGNED_NORMALIZED: types::GLenum = 0x8F9C; +#[allow(dead_code, non_upper_case_globals)] +pub const SRC_ALPHA: types::GLenum = 0x0302; +#[allow(dead_code, non_upper_case_globals)] +pub const SRC_ALPHA_SATURATE: types::GLenum = 0x0308; +#[allow(dead_code, non_upper_case_globals)] +pub const SRC_COLOR: types::GLenum = 0x0300; +#[allow(dead_code, non_upper_case_globals)] +pub const SRGB: types::GLenum = 0x8C40; +#[allow(dead_code, non_upper_case_globals)] +pub const SRGB8: types::GLenum = 0x8C41; +#[allow(dead_code, non_upper_case_globals)] +pub const SRGB8_ALPHA8: types::GLenum = 0x8C43; +#[allow(dead_code, non_upper_case_globals)] +pub const STATIC_COPY: types::GLenum = 0x88E6; +#[allow(dead_code, non_upper_case_globals)] +pub const STATIC_DRAW: types::GLenum = 0x88E4; +#[allow(dead_code, non_upper_case_globals)] +pub const STATIC_READ: types::GLenum = 0x88E5; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL: types::GLenum = 0x1802; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_ATTACHMENT: types::GLenum = 0x8D20; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_FAIL: types::GLenum = 0x8801; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_FUNC: types::GLenum = 0x8800; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_PASS_DEPTH_FAIL: types::GLenum = 0x8802; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_PASS_DEPTH_PASS: types::GLenum = 0x8803; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_REF: types::GLenum = 0x8CA3; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_VALUE_MASK: types::GLenum = 0x8CA4; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BACK_WRITEMASK: types::GLenum = 0x8CA5; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BITS: types::GLenum = 0x0D57; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_BUFFER_BIT: types::GLenum = 0x00000400; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_CLEAR_VALUE: types::GLenum = 0x0B91; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_FAIL: types::GLenum = 0x0B94; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_FUNC: types::GLenum = 0x0B92; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_INDEX8: types::GLenum = 0x8D48; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_PASS_DEPTH_FAIL: types::GLenum = 0x0B95; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_PASS_DEPTH_PASS: types::GLenum = 0x0B96; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_REF: types::GLenum = 0x0B97; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_TEST: types::GLenum = 0x0B90; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_VALUE_MASK: types::GLenum = 0x0B93; +#[allow(dead_code, non_upper_case_globals)] +pub const STENCIL_WRITEMASK: types::GLenum = 0x0B98; +#[allow(dead_code, non_upper_case_globals)] +pub const STREAM_COPY: types::GLenum = 0x88E2; +#[allow(dead_code, non_upper_case_globals)] +pub const STREAM_DRAW: types::GLenum = 0x88E0; +#[allow(dead_code, non_upper_case_globals)] +pub const STREAM_READ: types::GLenum = 0x88E1; +#[allow(dead_code, non_upper_case_globals)] +pub const SUBPIXEL_BITS: types::GLenum = 0x0D50; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_CONDITION: types::GLenum = 0x9113; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_FENCE: types::GLenum = 0x9116; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_FLAGS: types::GLenum = 0x9115; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_FLUSH_COMMANDS_BIT: types::GLenum = 0x00000001; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_GPU_COMMANDS_COMPLETE: types::GLenum = 0x9117; +#[allow(dead_code, non_upper_case_globals)] +pub const SYNC_STATUS: types::GLenum = 0x9114; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE: types::GLenum = 0x1702; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE0: types::GLenum = 0x84C0; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE1: types::GLenum = 0x84C1; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE10: types::GLenum = 0x84CA; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE11: types::GLenum = 0x84CB; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE12: types::GLenum = 0x84CC; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE13: types::GLenum = 0x84CD; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE14: types::GLenum = 0x84CE; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE15: types::GLenum = 0x84CF; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE16: types::GLenum = 0x84D0; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE17: types::GLenum = 0x84D1; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE18: types::GLenum = 0x84D2; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE19: types::GLenum = 0x84D3; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE2: types::GLenum = 0x84C2; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE20: types::GLenum = 0x84D4; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE21: types::GLenum = 0x84D5; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE22: types::GLenum = 0x84D6; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE23: types::GLenum = 0x84D7; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE24: types::GLenum = 0x84D8; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE25: types::GLenum = 0x84D9; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE26: types::GLenum = 0x84DA; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE27: types::GLenum = 0x84DB; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE28: types::GLenum = 0x84DC; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE29: types::GLenum = 0x84DD; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE3: types::GLenum = 0x84C3; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE30: types::GLenum = 0x84DE; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE31: types::GLenum = 0x84DF; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE4: types::GLenum = 0x84C4; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE5: types::GLenum = 0x84C5; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE6: types::GLenum = 0x84C6; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE7: types::GLenum = 0x84C7; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE8: types::GLenum = 0x84C8; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE9: types::GLenum = 0x84C9; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_2D: types::GLenum = 0x0DE1; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_2D_ARRAY: types::GLenum = 0x8C1A; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_3D: types::GLenum = 0x806F; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_BASE_LEVEL: types::GLenum = 0x813C; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_BINDING_2D: types::GLenum = 0x8069; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_BINDING_2D_ARRAY: types::GLenum = 0x8C1D; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_BINDING_3D: types::GLenum = 0x806A; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_BINDING_CUBE_MAP: types::GLenum = 0x8514; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_COMPARE_FUNC: types::GLenum = 0x884D; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_COMPARE_MODE: types::GLenum = 0x884C; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP: types::GLenum = 0x8513; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_NEGATIVE_X: types::GLenum = 0x8516; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_NEGATIVE_Y: types::GLenum = 0x8518; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_NEGATIVE_Z: types::GLenum = 0x851A; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_POSITIVE_X: types::GLenum = 0x8515; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_POSITIVE_Y: types::GLenum = 0x8517; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_CUBE_MAP_POSITIVE_Z: types::GLenum = 0x8519; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_IMMUTABLE_FORMAT: types::GLenum = 0x912F; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_IMMUTABLE_LEVELS: types::GLenum = 0x82DF; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_MAG_FILTER: types::GLenum = 0x2800; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_MAX_LEVEL: types::GLenum = 0x813D; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_MAX_LOD: types::GLenum = 0x813B; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_MIN_FILTER: types::GLenum = 0x2801; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_MIN_LOD: types::GLenum = 0x813A; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_SWIZZLE_A: types::GLenum = 0x8E45; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_SWIZZLE_B: types::GLenum = 0x8E44; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_SWIZZLE_G: types::GLenum = 0x8E43; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_SWIZZLE_R: types::GLenum = 0x8E42; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_WRAP_R: types::GLenum = 0x8072; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_WRAP_S: types::GLenum = 0x2802; +#[allow(dead_code, non_upper_case_globals)] +pub const TEXTURE_WRAP_T: types::GLenum = 0x2803; +#[allow(dead_code, non_upper_case_globals)] +pub const TIMEOUT_EXPIRED: types::GLenum = 0x911B; +#[allow(dead_code, non_upper_case_globals)] +pub const TIMEOUT_IGNORED: types::GLuint64 = 0xFFFFFFFFFFFFFFFF; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK: types::GLenum = 0x8E22; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_ACTIVE: types::GLenum = 0x8E24; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BINDING: types::GLenum = 0x8E25; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BUFFER: types::GLenum = 0x8C8E; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BUFFER_BINDING: types::GLenum = 0x8C8F; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BUFFER_MODE: types::GLenum = 0x8C7F; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BUFFER_SIZE: types::GLenum = 0x8C85; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_BUFFER_START: types::GLenum = 0x8C84; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_PAUSED: types::GLenum = 0x8E23; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: types::GLenum = 0x8C88; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_VARYINGS: types::GLenum = 0x8C83; +#[allow(dead_code, non_upper_case_globals)] +pub const TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: types::GLenum = 0x8C76; +#[allow(dead_code, non_upper_case_globals)] +pub const TRIANGLES: types::GLenum = 0x0004; +#[allow(dead_code, non_upper_case_globals)] +pub const TRIANGLE_FAN: types::GLenum = 0x0006; +#[allow(dead_code, non_upper_case_globals)] +pub const TRIANGLE_STRIP: types::GLenum = 0x0005; +#[allow(dead_code, non_upper_case_globals)] +pub const TRUE: types::GLboolean = 1; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_ARRAY_STRIDE: types::GLenum = 0x8A3C; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_ACTIVE_UNIFORMS: types::GLenum = 0x8A42; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: types::GLenum = 0x8A43; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_BINDING: types::GLenum = 0x8A3F; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_DATA_SIZE: types::GLenum = 0x8A40; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_INDEX: types::GLenum = 0x8A3A; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_NAME_LENGTH: types::GLenum = 0x8A41; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: types::GLenum = 0x8A46; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: types::GLenum = 0x8A44; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BUFFER: types::GLenum = 0x8A11; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BUFFER_BINDING: types::GLenum = 0x8A28; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BUFFER_OFFSET_ALIGNMENT: types::GLenum = 0x8A34; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BUFFER_SIZE: types::GLenum = 0x8A2A; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_BUFFER_START: types::GLenum = 0x8A29; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_IS_ROW_MAJOR: types::GLenum = 0x8A3E; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_MATRIX_STRIDE: types::GLenum = 0x8A3D; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_NAME_LENGTH: types::GLenum = 0x8A39; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_OFFSET: types::GLenum = 0x8A3B; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_SIZE: types::GLenum = 0x8A38; +#[allow(dead_code, non_upper_case_globals)] +pub const UNIFORM_TYPE: types::GLenum = 0x8A37; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_ALIGNMENT: types::GLenum = 0x0CF5; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_IMAGE_HEIGHT: types::GLenum = 0x806E; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_ROW_LENGTH: types::GLenum = 0x0CF2; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_SKIP_IMAGES: types::GLenum = 0x806D; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_SKIP_PIXELS: types::GLenum = 0x0CF4; +#[allow(dead_code, non_upper_case_globals)] +pub const UNPACK_SKIP_ROWS: types::GLenum = 0x0CF3; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNALED: types::GLenum = 0x9118; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_BYTE: types::GLenum = 0x1401; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT: types::GLenum = 0x1405; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_10F_11F_11F_REV: types::GLenum = 0x8C3B; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_24_8: types::GLenum = 0x84FA; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_2_10_10_10_REV: types::GLenum = 0x8368; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_5_9_9_9_REV: types::GLenum = 0x8C3E; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_SAMPLER_2D: types::GLenum = 0x8DD2; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_SAMPLER_2D_ARRAY: types::GLenum = 0x8DD7; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_SAMPLER_3D: types::GLenum = 0x8DD3; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_SAMPLER_CUBE: types::GLenum = 0x8DD4; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_VEC2: types::GLenum = 0x8DC6; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_VEC3: types::GLenum = 0x8DC7; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_INT_VEC4: types::GLenum = 0x8DC8; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_NORMALIZED: types::GLenum = 0x8C17; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_SHORT: types::GLenum = 0x1403; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_SHORT_4_4_4_4: types::GLenum = 0x8033; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_SHORT_5_5_5_1: types::GLenum = 0x8034; +#[allow(dead_code, non_upper_case_globals)] +pub const UNSIGNED_SHORT_5_6_5: types::GLenum = 0x8363; +#[allow(dead_code, non_upper_case_globals)] +pub const VALIDATE_STATUS: types::GLenum = 0x8B83; +#[allow(dead_code, non_upper_case_globals)] +pub const VENDOR: types::GLenum = 0x1F00; +#[allow(dead_code, non_upper_case_globals)] +pub const VERSION: types::GLenum = 0x1F02; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ARRAY_BINDING: types::GLenum = 0x85B5; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: types::GLenum = 0x889F; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_DIVISOR: types::GLenum = 0x88FE; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_ENABLED: types::GLenum = 0x8622; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_INTEGER: types::GLenum = 0x88FD; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_NORMALIZED: types::GLenum = 0x886A; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_POINTER: types::GLenum = 0x8645; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_SIZE: types::GLenum = 0x8623; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_STRIDE: types::GLenum = 0x8624; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_ATTRIB_ARRAY_TYPE: types::GLenum = 0x8625; +#[allow(dead_code, non_upper_case_globals)] +pub const VERTEX_SHADER: types::GLenum = 0x8B31; +#[allow(dead_code, non_upper_case_globals)] +pub const VIEWPORT: types::GLenum = 0x0BA2; +#[allow(dead_code, non_upper_case_globals)] +pub const WAIT_FAILED: types::GLenum = 0x911D; +#[allow(dead_code, non_upper_case_globals)] +pub const ZERO: types::GLenum = 0; - impl FnPtr { - /// Creates a `FnPtr` from a load attempt. - fn new(ptr: *const __gl_imports::raw::c_void) -> FnPtr { - if ptr.is_null() { - FnPtr { - f: missing_fn_panic as *const __gl_imports::raw::c_void, - is_loaded: false - } - } else { - FnPtr { f: ptr, is_loaded: true } - } - } - - /// Returns `true` if the function has been successfully loaded. - /// - /// If it returns `false`, calling the corresponding function will fail. - #[inline] - #[allow(dead_code)] - pub fn is_loaded(&self) -> bool { - self.is_loaded +#[allow(dead_code, missing_copy_implementations)] +#[derive(Clone)] +pub struct FnPtr { + /// The function pointer that will be used when calling the function. + f: *const __gl_imports::raw::c_void, + /// True if the pointer points to a real function, false if points to a `panic!` fn. + is_loaded: bool, +} + +impl FnPtr { + /// Creates a `FnPtr` from a load attempt. + fn new(ptr: *const __gl_imports::raw::c_void) -> FnPtr { + if ptr.is_null() { + FnPtr { + f: missing_fn_panic as *const __gl_imports::raw::c_void, + is_loaded: false, } + } else { + FnPtr { f: ptr, is_loaded: true } } - + } + + /// Returns `true` if the function has been successfully loaded. + /// + /// If it returns `false`, calling the corresponding function will fail. + #[inline] + #[allow(dead_code)] + pub fn is_loaded(&self) -> bool { + self.is_loaded + } +} + #[inline(never)] - fn missing_fn_panic() -> ! { - panic!("gles2 function was not loaded") - } - - #[allow(non_camel_case_types, non_snake_case, dead_code)] - #[derive(Clone)] - pub struct Gles2 { -/// Fallbacks: ActiveTextureARB -pub ActiveTexture: FnPtr, -/// Fallbacks: AttachObjectARB -pub AttachShader: FnPtr, -/// Fallbacks: BeginQueryARB -pub BeginQuery: FnPtr, -/// Fallbacks: BeginTransformFeedbackEXT, BeginTransformFeedbackNV -pub BeginTransformFeedback: FnPtr, -/// Fallbacks: BindAttribLocationARB -pub BindAttribLocation: FnPtr, -/// Fallbacks: BindBufferARB -pub BindBuffer: FnPtr, -/// Fallbacks: BindBufferBaseEXT, BindBufferBaseNV -pub BindBufferBase: FnPtr, -/// Fallbacks: BindBufferRangeEXT, BindBufferRangeNV -pub BindBufferRange: FnPtr, -pub BindFramebuffer: FnPtr, -pub BindRenderbuffer: FnPtr, -pub BindSampler: FnPtr, -/// Fallbacks: BindTextureEXT -pub BindTexture: FnPtr, -pub BindTransformFeedback: FnPtr, -/// Fallbacks: BindVertexArrayOES -pub BindVertexArray: FnPtr, -/// Fallbacks: BlendColorEXT -pub BlendColor: FnPtr, -/// Fallbacks: BlendEquationEXT -pub BlendEquation: FnPtr, -/// Fallbacks: BlendEquationSeparateEXT -pub BlendEquationSeparate: FnPtr, -pub BlendFunc: FnPtr, -/// Fallbacks: BlendFuncSeparateEXT, BlendFuncSeparateINGR -pub BlendFuncSeparate: FnPtr, -/// Fallbacks: BlitFramebufferEXT, BlitFramebufferNV -pub BlitFramebuffer: FnPtr, -/// Fallbacks: BufferDataARB -pub BufferData: FnPtr, -/// Fallbacks: BufferSubDataARB -pub BufferSubData: FnPtr, -/// Fallbacks: CheckFramebufferStatusEXT -pub CheckFramebufferStatus: FnPtr, -pub Clear: FnPtr, -pub ClearBufferfi: FnPtr, -pub ClearBufferfv: FnPtr, -pub ClearBufferiv: FnPtr, -pub ClearBufferuiv: FnPtr, -pub ClearColor: FnPtr, -/// Fallbacks: ClearDepthfOES -pub ClearDepthf: FnPtr, -pub ClearStencil: FnPtr, -/// Fallbacks: ClientWaitSyncAPPLE -pub ClientWaitSync: FnPtr, -pub ColorMask: FnPtr, -/// Fallbacks: CompileShaderARB -pub CompileShader: FnPtr, -/// Fallbacks: CompressedTexImage2DARB -pub CompressedTexImage2D: FnPtr, -/// Fallbacks: CompressedTexImage3DARB -pub CompressedTexImage3D: FnPtr, -/// Fallbacks: CompressedTexSubImage2DARB -pub CompressedTexSubImage2D: FnPtr, -/// Fallbacks: CompressedTexSubImage3DARB -pub CompressedTexSubImage3D: FnPtr, -/// Fallbacks: CopyBufferSubDataNV -pub CopyBufferSubData: FnPtr, -/// Fallbacks: CopyTexImage2DEXT -pub CopyTexImage2D: FnPtr, -/// Fallbacks: CopyTexSubImage2DEXT -pub CopyTexSubImage2D: FnPtr, -/// Fallbacks: CopyTexSubImage3DEXT -pub CopyTexSubImage3D: FnPtr, -/// Fallbacks: CreateProgramObjectARB -pub CreateProgram: FnPtr, -/// Fallbacks: CreateShaderObjectARB -pub CreateShader: FnPtr, -pub CullFace: FnPtr, -/// Fallbacks: DeleteBuffersARB -pub DeleteBuffers: FnPtr, -/// Fallbacks: DeleteFramebuffersEXT -pub DeleteFramebuffers: FnPtr, -pub DeleteProgram: FnPtr, -/// Fallbacks: DeleteQueriesARB -pub DeleteQueries: FnPtr, -/// Fallbacks: DeleteRenderbuffersEXT -pub DeleteRenderbuffers: FnPtr, -pub DeleteSamplers: FnPtr, -pub DeleteShader: FnPtr, -/// Fallbacks: DeleteSyncAPPLE -pub DeleteSync: FnPtr, -pub DeleteTextures: FnPtr, -/// Fallbacks: DeleteTransformFeedbacksNV -pub DeleteTransformFeedbacks: FnPtr, -/// Fallbacks: DeleteVertexArraysAPPLE, DeleteVertexArraysOES -pub DeleteVertexArrays: FnPtr, -pub DepthFunc: FnPtr, -pub DepthMask: FnPtr, -/// Fallbacks: DepthRangefOES -pub DepthRangef: FnPtr, -/// Fallbacks: DetachObjectARB -pub DetachShader: FnPtr, -pub Disable: FnPtr, -/// Fallbacks: DisableVertexAttribArrayARB -pub DisableVertexAttribArray: FnPtr, -/// Fallbacks: DrawArraysEXT -pub DrawArrays: FnPtr, -/// Fallbacks: DrawArraysInstancedANGLE, DrawArraysInstancedARB, DrawArraysInstancedEXT, DrawArraysInstancedNV -pub DrawArraysInstanced: FnPtr, -/// Fallbacks: DrawBuffersARB, DrawBuffersATI, DrawBuffersEXT -pub DrawBuffers: FnPtr, -pub DrawElements: FnPtr, -/// Fallbacks: DrawElementsInstancedANGLE, DrawElementsInstancedARB, DrawElementsInstancedEXT, DrawElementsInstancedNV -pub DrawElementsInstanced: FnPtr, -/// Fallbacks: DrawRangeElementsEXT -pub DrawRangeElements: FnPtr, -pub Enable: FnPtr, -/// Fallbacks: EnableVertexAttribArrayARB -pub EnableVertexAttribArray: FnPtr, -/// Fallbacks: EndQueryARB -pub EndQuery: FnPtr, -/// Fallbacks: EndTransformFeedbackEXT, EndTransformFeedbackNV -pub EndTransformFeedback: FnPtr, -/// Fallbacks: FenceSyncAPPLE -pub FenceSync: FnPtr, -pub Finish: FnPtr, -pub Flush: FnPtr, -/// Fallbacks: FlushMappedBufferRangeAPPLE, FlushMappedBufferRangeEXT -pub FlushMappedBufferRange: FnPtr, -/// Fallbacks: FramebufferRenderbufferEXT -pub FramebufferRenderbuffer: FnPtr, -/// Fallbacks: FramebufferTexture2DEXT -pub FramebufferTexture2D: FnPtr, -/// Fallbacks: FramebufferTextureLayerARB, FramebufferTextureLayerEXT -pub FramebufferTextureLayer: FnPtr, -pub FrontFace: FnPtr, -/// Fallbacks: GenBuffersARB -pub GenBuffers: FnPtr, -/// Fallbacks: GenFramebuffersEXT -pub GenFramebuffers: FnPtr, -/// Fallbacks: GenQueriesARB -pub GenQueries: FnPtr, -/// Fallbacks: GenRenderbuffersEXT -pub GenRenderbuffers: FnPtr, -pub GenSamplers: FnPtr, -pub GenTextures: FnPtr, -/// Fallbacks: GenTransformFeedbacksNV -pub GenTransformFeedbacks: FnPtr, -/// Fallbacks: GenVertexArraysAPPLE, GenVertexArraysOES -pub GenVertexArrays: FnPtr, -/// Fallbacks: GenerateMipmapEXT -pub GenerateMipmap: FnPtr, -/// Fallbacks: GetActiveAttribARB -pub GetActiveAttrib: FnPtr, -/// Fallbacks: GetActiveUniformARB -pub GetActiveUniform: FnPtr, -pub GetActiveUniformBlockName: FnPtr, -pub GetActiveUniformBlockiv: FnPtr, -pub GetActiveUniformsiv: FnPtr, -pub GetAttachedShaders: FnPtr, -/// Fallbacks: GetAttribLocationARB -pub GetAttribLocation: FnPtr, -pub GetBooleanv: FnPtr, -pub GetBufferParameteri64v: FnPtr, -/// Fallbacks: GetBufferParameterivARB -pub GetBufferParameteriv: FnPtr, -/// Fallbacks: GetBufferPointervARB, GetBufferPointervOES -pub GetBufferPointerv: FnPtr, -pub GetError: FnPtr, -pub GetFloatv: FnPtr, -/// Fallbacks: GetFragDataLocationEXT -pub GetFragDataLocation: FnPtr, -/// Fallbacks: GetFramebufferAttachmentParameterivEXT -pub GetFramebufferAttachmentParameteriv: FnPtr, -pub GetInteger64i_v: FnPtr, -/// Fallbacks: GetInteger64vAPPLE -pub GetInteger64v: FnPtr, -/// Fallbacks: GetIntegerIndexedvEXT -pub GetIntegeri_v: FnPtr, -pub GetIntegerv: FnPtr, -pub GetInternalformativ: FnPtr, -/// Fallbacks: GetProgramBinaryOES -pub GetProgramBinary: FnPtr, -pub GetProgramInfoLog: FnPtr, -pub GetProgramiv: FnPtr, -/// Fallbacks: GetQueryObjectuivARB -pub GetQueryObjectuiv: FnPtr, -/// Fallbacks: GetQueryivARB -pub GetQueryiv: FnPtr, -/// Fallbacks: GetRenderbufferParameterivEXT -pub GetRenderbufferParameteriv: FnPtr, -pub GetSamplerParameterfv: FnPtr, -pub GetSamplerParameteriv: FnPtr, -pub GetShaderInfoLog: FnPtr, -pub GetShaderPrecisionFormat: FnPtr, -/// Fallbacks: GetShaderSourceARB -pub GetShaderSource: FnPtr, -pub GetShaderiv: FnPtr, -pub GetString: FnPtr, -pub GetStringi: FnPtr, -/// Fallbacks: GetSyncivAPPLE -pub GetSynciv: FnPtr, -pub GetTexParameterfv: FnPtr, -pub GetTexParameteriv: FnPtr, -/// Fallbacks: GetTransformFeedbackVaryingEXT -pub GetTransformFeedbackVarying: FnPtr, -pub GetUniformBlockIndex: FnPtr, -pub GetUniformIndices: FnPtr, -/// Fallbacks: GetUniformLocationARB -pub GetUniformLocation: FnPtr, -/// Fallbacks: GetUniformfvARB -pub GetUniformfv: FnPtr, -/// Fallbacks: GetUniformivARB -pub GetUniformiv: FnPtr, -/// Fallbacks: GetUniformuivEXT -pub GetUniformuiv: FnPtr, -/// Fallbacks: GetVertexAttribIivEXT -pub GetVertexAttribIiv: FnPtr, -/// Fallbacks: GetVertexAttribIuivEXT -pub GetVertexAttribIuiv: FnPtr, -/// Fallbacks: GetVertexAttribPointervARB, GetVertexAttribPointervNV -pub GetVertexAttribPointerv: FnPtr, -/// Fallbacks: GetVertexAttribfvARB, GetVertexAttribfvNV -pub GetVertexAttribfv: FnPtr, -/// Fallbacks: GetVertexAttribivARB, GetVertexAttribivNV -pub GetVertexAttribiv: FnPtr, -pub Hint: FnPtr, -pub InvalidateFramebuffer: FnPtr, -pub InvalidateSubFramebuffer: FnPtr, -/// Fallbacks: IsBufferARB -pub IsBuffer: FnPtr, -pub IsEnabled: FnPtr, -/// Fallbacks: IsFramebufferEXT -pub IsFramebuffer: FnPtr, -pub IsProgram: FnPtr, -/// Fallbacks: IsQueryARB -pub IsQuery: FnPtr, -/// Fallbacks: IsRenderbufferEXT -pub IsRenderbuffer: FnPtr, -pub IsSampler: FnPtr, -pub IsShader: FnPtr, -/// Fallbacks: IsSyncAPPLE -pub IsSync: FnPtr, -pub IsTexture: FnPtr, -/// Fallbacks: IsTransformFeedbackNV -pub IsTransformFeedback: FnPtr, -/// Fallbacks: IsVertexArrayAPPLE, IsVertexArrayOES -pub IsVertexArray: FnPtr, -pub LineWidth: FnPtr, -/// Fallbacks: LinkProgramARB -pub LinkProgram: FnPtr, -/// Fallbacks: MapBufferRangeEXT -pub MapBufferRange: FnPtr, -/// Fallbacks: PauseTransformFeedbackNV -pub PauseTransformFeedback: FnPtr, -pub PixelStorei: FnPtr, -pub PolygonOffset: FnPtr, -/// Fallbacks: ProgramBinaryOES -pub ProgramBinary: FnPtr, -/// Fallbacks: ProgramParameteriARB, ProgramParameteriEXT -pub ProgramParameteri: FnPtr, -pub ReadBuffer: FnPtr, -pub ReadPixels: FnPtr, -pub ReleaseShaderCompiler: FnPtr, -/// Fallbacks: RenderbufferStorageEXT -pub RenderbufferStorage: FnPtr, -/// Fallbacks: RenderbufferStorageMultisampleEXT, RenderbufferStorageMultisampleNV -pub RenderbufferStorageMultisample: FnPtr, -/// Fallbacks: ResumeTransformFeedbackNV -pub ResumeTransformFeedback: FnPtr, -/// Fallbacks: SampleCoverageARB -pub SampleCoverage: FnPtr, -pub SamplerParameterf: FnPtr, -pub SamplerParameterfv: FnPtr, -pub SamplerParameteri: FnPtr, -pub SamplerParameteriv: FnPtr, -pub Scissor: FnPtr, -pub ShaderBinary: FnPtr, -/// Fallbacks: ShaderSourceARB -pub ShaderSource: FnPtr, -pub StencilFunc: FnPtr, -pub StencilFuncSeparate: FnPtr, -pub StencilMask: FnPtr, -pub StencilMaskSeparate: FnPtr, -pub StencilOp: FnPtr, -/// Fallbacks: StencilOpSeparateATI -pub StencilOpSeparate: FnPtr, -pub TexImage2D: FnPtr, -/// Fallbacks: TexImage3DEXT -pub TexImage3D: FnPtr, -pub TexParameterf: FnPtr, -pub TexParameterfv: FnPtr, -pub TexParameteri: FnPtr, -pub TexParameteriv: FnPtr, -/// Fallbacks: TexStorage2DEXT -pub TexStorage2D: FnPtr, -/// Fallbacks: TexStorage3DEXT -pub TexStorage3D: FnPtr, -/// Fallbacks: TexSubImage2DEXT -pub TexSubImage2D: FnPtr, -/// Fallbacks: TexSubImage3DEXT -pub TexSubImage3D: FnPtr, -/// Fallbacks: TransformFeedbackVaryingsEXT -pub TransformFeedbackVaryings: FnPtr, -/// Fallbacks: Uniform1fARB -pub Uniform1f: FnPtr, -/// Fallbacks: Uniform1fvARB -pub Uniform1fv: FnPtr, -/// Fallbacks: Uniform1iARB -pub Uniform1i: FnPtr, -/// Fallbacks: Uniform1ivARB -pub Uniform1iv: FnPtr, -/// Fallbacks: Uniform1uiEXT -pub Uniform1ui: FnPtr, -/// Fallbacks: Uniform1uivEXT -pub Uniform1uiv: FnPtr, -/// Fallbacks: Uniform2fARB -pub Uniform2f: FnPtr, -/// Fallbacks: Uniform2fvARB -pub Uniform2fv: FnPtr, -/// Fallbacks: Uniform2iARB -pub Uniform2i: FnPtr, -/// Fallbacks: Uniform2ivARB -pub Uniform2iv: FnPtr, -/// Fallbacks: Uniform2uiEXT -pub Uniform2ui: FnPtr, -/// Fallbacks: Uniform2uivEXT -pub Uniform2uiv: FnPtr, -/// Fallbacks: Uniform3fARB -pub Uniform3f: FnPtr, -/// Fallbacks: Uniform3fvARB -pub Uniform3fv: FnPtr, -/// Fallbacks: Uniform3iARB -pub Uniform3i: FnPtr, -/// Fallbacks: Uniform3ivARB -pub Uniform3iv: FnPtr, -/// Fallbacks: Uniform3uiEXT -pub Uniform3ui: FnPtr, -/// Fallbacks: Uniform3uivEXT -pub Uniform3uiv: FnPtr, -/// Fallbacks: Uniform4fARB -pub Uniform4f: FnPtr, -/// Fallbacks: Uniform4fvARB -pub Uniform4fv: FnPtr, -/// Fallbacks: Uniform4iARB -pub Uniform4i: FnPtr, -/// Fallbacks: Uniform4ivARB -pub Uniform4iv: FnPtr, -/// Fallbacks: Uniform4uiEXT -pub Uniform4ui: FnPtr, -/// Fallbacks: Uniform4uivEXT -pub Uniform4uiv: FnPtr, -pub UniformBlockBinding: FnPtr, -/// Fallbacks: UniformMatrix2fvARB -pub UniformMatrix2fv: FnPtr, -/// Fallbacks: UniformMatrix2x3fvNV -pub UniformMatrix2x3fv: FnPtr, -/// Fallbacks: UniformMatrix2x4fvNV -pub UniformMatrix2x4fv: FnPtr, -/// Fallbacks: UniformMatrix3fvARB -pub UniformMatrix3fv: FnPtr, -/// Fallbacks: UniformMatrix3x2fvNV -pub UniformMatrix3x2fv: FnPtr, -/// Fallbacks: UniformMatrix3x4fvNV -pub UniformMatrix3x4fv: FnPtr, -/// Fallbacks: UniformMatrix4fvARB -pub UniformMatrix4fv: FnPtr, -/// Fallbacks: UniformMatrix4x2fvNV -pub UniformMatrix4x2fv: FnPtr, -/// Fallbacks: UniformMatrix4x3fvNV -pub UniformMatrix4x3fv: FnPtr, -/// Fallbacks: UnmapBufferARB, UnmapBufferOES -pub UnmapBuffer: FnPtr, -/// Fallbacks: UseProgramObjectARB -pub UseProgram: FnPtr, -/// Fallbacks: ValidateProgramARB -pub ValidateProgram: FnPtr, -/// Fallbacks: VertexAttrib1fARB, VertexAttrib1fNV -pub VertexAttrib1f: FnPtr, -/// Fallbacks: VertexAttrib1fvARB, VertexAttrib1fvNV -pub VertexAttrib1fv: FnPtr, -/// Fallbacks: VertexAttrib2fARB, VertexAttrib2fNV -pub VertexAttrib2f: FnPtr, -/// Fallbacks: VertexAttrib2fvARB, VertexAttrib2fvNV -pub VertexAttrib2fv: FnPtr, -/// Fallbacks: VertexAttrib3fARB, VertexAttrib3fNV -pub VertexAttrib3f: FnPtr, -/// Fallbacks: VertexAttrib3fvARB, VertexAttrib3fvNV -pub VertexAttrib3fv: FnPtr, -/// Fallbacks: VertexAttrib4fARB, VertexAttrib4fNV -pub VertexAttrib4f: FnPtr, -/// Fallbacks: VertexAttrib4fvARB, VertexAttrib4fvNV -pub VertexAttrib4fv: FnPtr, -/// Fallbacks: VertexAttribDivisorANGLE, VertexAttribDivisorARB, VertexAttribDivisorEXT, VertexAttribDivisorNV -pub VertexAttribDivisor: FnPtr, -/// Fallbacks: VertexAttribI4iEXT -pub VertexAttribI4i: FnPtr, -/// Fallbacks: VertexAttribI4ivEXT -pub VertexAttribI4iv: FnPtr, -/// Fallbacks: VertexAttribI4uiEXT -pub VertexAttribI4ui: FnPtr, -/// Fallbacks: VertexAttribI4uivEXT -pub VertexAttribI4uiv: FnPtr, -/// Fallbacks: VertexAttribIPointerEXT -pub VertexAttribIPointer: FnPtr, -/// Fallbacks: VertexAttribPointerARB -pub VertexAttribPointer: FnPtr, -pub Viewport: FnPtr, -/// Fallbacks: WaitSyncAPPLE -pub WaitSync: FnPtr, -_priv: () +fn missing_fn_panic() -> ! { + panic!("gles2 function was not loaded") } + +#[allow(non_camel_case_types, non_snake_case, dead_code)] +#[derive(Clone)] +pub struct Gles2 { + /// Fallbacks: ActiveTextureARB + pub ActiveTexture: FnPtr, + /// Fallbacks: AttachObjectARB + pub AttachShader: FnPtr, + /// Fallbacks: BeginQueryARB + pub BeginQuery: FnPtr, + /// Fallbacks: BeginTransformFeedbackEXT, BeginTransformFeedbackNV + pub BeginTransformFeedback: FnPtr, + /// Fallbacks: BindAttribLocationARB + pub BindAttribLocation: FnPtr, + /// Fallbacks: BindBufferARB + pub BindBuffer: FnPtr, + /// Fallbacks: BindBufferBaseEXT, BindBufferBaseNV + pub BindBufferBase: FnPtr, + /// Fallbacks: BindBufferRangeEXT, BindBufferRangeNV + pub BindBufferRange: FnPtr, + pub BindFramebuffer: FnPtr, + pub BindRenderbuffer: FnPtr, + pub BindSampler: FnPtr, + /// Fallbacks: BindTextureEXT + pub BindTexture: FnPtr, + pub BindTransformFeedback: FnPtr, + /// Fallbacks: BindVertexArrayOES + pub BindVertexArray: FnPtr, + /// Fallbacks: BlendColorEXT + pub BlendColor: FnPtr, + /// Fallbacks: BlendEquationEXT + pub BlendEquation: FnPtr, + /// Fallbacks: BlendEquationSeparateEXT + pub BlendEquationSeparate: FnPtr, + pub BlendFunc: FnPtr, + /// Fallbacks: BlendFuncSeparateEXT, BlendFuncSeparateINGR + pub BlendFuncSeparate: FnPtr, + /// Fallbacks: BlitFramebufferEXT, BlitFramebufferNV + pub BlitFramebuffer: FnPtr, + /// Fallbacks: BufferDataARB + pub BufferData: FnPtr, + /// Fallbacks: BufferSubDataARB + pub BufferSubData: FnPtr, + /// Fallbacks: CheckFramebufferStatusEXT + pub CheckFramebufferStatus: FnPtr, + pub Clear: FnPtr, + pub ClearBufferfi: FnPtr, + pub ClearBufferfv: FnPtr, + pub ClearBufferiv: FnPtr, + pub ClearBufferuiv: FnPtr, + pub ClearColor: FnPtr, + /// Fallbacks: ClearDepthfOES + pub ClearDepthf: FnPtr, + pub ClearStencil: FnPtr, + /// Fallbacks: ClientWaitSyncAPPLE + pub ClientWaitSync: FnPtr, + pub ColorMask: FnPtr, + /// Fallbacks: CompileShaderARB + pub CompileShader: FnPtr, + /// Fallbacks: CompressedTexImage2DARB + pub CompressedTexImage2D: FnPtr, + /// Fallbacks: CompressedTexImage3DARB + pub CompressedTexImage3D: FnPtr, + /// Fallbacks: CompressedTexSubImage2DARB + pub CompressedTexSubImage2D: FnPtr, + /// Fallbacks: CompressedTexSubImage3DARB + pub CompressedTexSubImage3D: FnPtr, + /// Fallbacks: CopyBufferSubDataNV + pub CopyBufferSubData: FnPtr, + /// Fallbacks: CopyTexImage2DEXT + pub CopyTexImage2D: FnPtr, + /// Fallbacks: CopyTexSubImage2DEXT + pub CopyTexSubImage2D: FnPtr, + /// Fallbacks: CopyTexSubImage3DEXT + pub CopyTexSubImage3D: FnPtr, + /// Fallbacks: CreateProgramObjectARB + pub CreateProgram: FnPtr, + /// Fallbacks: CreateShaderObjectARB + pub CreateShader: FnPtr, + pub CullFace: FnPtr, + /// Fallbacks: DeleteBuffersARB + pub DeleteBuffers: FnPtr, + /// Fallbacks: DeleteFramebuffersEXT + pub DeleteFramebuffers: FnPtr, + pub DeleteProgram: FnPtr, + /// Fallbacks: DeleteQueriesARB + pub DeleteQueries: FnPtr, + /// Fallbacks: DeleteRenderbuffersEXT + pub DeleteRenderbuffers: FnPtr, + pub DeleteSamplers: FnPtr, + pub DeleteShader: FnPtr, + /// Fallbacks: DeleteSyncAPPLE + pub DeleteSync: FnPtr, + pub DeleteTextures: FnPtr, + /// Fallbacks: DeleteTransformFeedbacksNV + pub DeleteTransformFeedbacks: FnPtr, + /// Fallbacks: DeleteVertexArraysAPPLE, DeleteVertexArraysOES + pub DeleteVertexArrays: FnPtr, + pub DepthFunc: FnPtr, + pub DepthMask: FnPtr, + /// Fallbacks: DepthRangefOES + pub DepthRangef: FnPtr, + /// Fallbacks: DetachObjectARB + pub DetachShader: FnPtr, + pub Disable: FnPtr, + /// Fallbacks: DisableVertexAttribArrayARB + pub DisableVertexAttribArray: FnPtr, + /// Fallbacks: DrawArraysEXT + pub DrawArrays: FnPtr, + /// Fallbacks: DrawArraysInstancedANGLE, DrawArraysInstancedARB, DrawArraysInstancedEXT, DrawArraysInstancedNV + pub DrawArraysInstanced: FnPtr, + /// Fallbacks: DrawBuffersARB, DrawBuffersATI, DrawBuffersEXT + pub DrawBuffers: FnPtr, + pub DrawElements: FnPtr, + /// Fallbacks: DrawElementsInstancedANGLE, DrawElementsInstancedARB, DrawElementsInstancedEXT, DrawElementsInstancedNV + pub DrawElementsInstanced: FnPtr, + /// Fallbacks: DrawRangeElementsEXT + pub DrawRangeElements: FnPtr, + pub Enable: FnPtr, + /// Fallbacks: EnableVertexAttribArrayARB + pub EnableVertexAttribArray: FnPtr, + /// Fallbacks: EndQueryARB + pub EndQuery: FnPtr, + /// Fallbacks: EndTransformFeedbackEXT, EndTransformFeedbackNV + pub EndTransformFeedback: FnPtr, + /// Fallbacks: FenceSyncAPPLE + pub FenceSync: FnPtr, + pub Finish: FnPtr, + pub Flush: FnPtr, + /// Fallbacks: FlushMappedBufferRangeAPPLE, FlushMappedBufferRangeEXT + pub FlushMappedBufferRange: FnPtr, + /// Fallbacks: FramebufferRenderbufferEXT + pub FramebufferRenderbuffer: FnPtr, + /// Fallbacks: FramebufferTexture2DEXT + pub FramebufferTexture2D: FnPtr, + /// Fallbacks: FramebufferTextureLayerARB, FramebufferTextureLayerEXT + pub FramebufferTextureLayer: FnPtr, + pub FrontFace: FnPtr, + /// Fallbacks: GenBuffersARB + pub GenBuffers: FnPtr, + /// Fallbacks: GenFramebuffersEXT + pub GenFramebuffers: FnPtr, + /// Fallbacks: GenQueriesARB + pub GenQueries: FnPtr, + /// Fallbacks: GenRenderbuffersEXT + pub GenRenderbuffers: FnPtr, + pub GenSamplers: FnPtr, + pub GenTextures: FnPtr, + /// Fallbacks: GenTransformFeedbacksNV + pub GenTransformFeedbacks: FnPtr, + /// Fallbacks: GenVertexArraysAPPLE, GenVertexArraysOES + pub GenVertexArrays: FnPtr, + /// Fallbacks: GenerateMipmapEXT + pub GenerateMipmap: FnPtr, + /// Fallbacks: GetActiveAttribARB + pub GetActiveAttrib: FnPtr, + /// Fallbacks: GetActiveUniformARB + pub GetActiveUniform: FnPtr, + pub GetActiveUniformBlockName: FnPtr, + pub GetActiveUniformBlockiv: FnPtr, + pub GetActiveUniformsiv: FnPtr, + pub GetAttachedShaders: FnPtr, + /// Fallbacks: GetAttribLocationARB + pub GetAttribLocation: FnPtr, + pub GetBooleanv: FnPtr, + pub GetBufferParameteri64v: FnPtr, + /// Fallbacks: GetBufferParameterivARB + pub GetBufferParameteriv: FnPtr, + /// Fallbacks: GetBufferPointervARB, GetBufferPointervOES + pub GetBufferPointerv: FnPtr, + pub GetError: FnPtr, + pub GetFloatv: FnPtr, + /// Fallbacks: GetFragDataLocationEXT + pub GetFragDataLocation: FnPtr, + /// Fallbacks: GetFramebufferAttachmentParameterivEXT + pub GetFramebufferAttachmentParameteriv: FnPtr, + pub GetInteger64i_v: FnPtr, + /// Fallbacks: GetInteger64vAPPLE + pub GetInteger64v: FnPtr, + /// Fallbacks: GetIntegerIndexedvEXT + pub GetIntegeri_v: FnPtr, + pub GetIntegerv: FnPtr, + pub GetInternalformativ: FnPtr, + /// Fallbacks: GetProgramBinaryOES + pub GetProgramBinary: FnPtr, + pub GetProgramInfoLog: FnPtr, + pub GetProgramiv: FnPtr, + /// Fallbacks: GetQueryObjectuivARB + pub GetQueryObjectuiv: FnPtr, + /// Fallbacks: GetQueryivARB + pub GetQueryiv: FnPtr, + /// Fallbacks: GetRenderbufferParameterivEXT + pub GetRenderbufferParameteriv: FnPtr, + pub GetSamplerParameterfv: FnPtr, + pub GetSamplerParameteriv: FnPtr, + pub GetShaderInfoLog: FnPtr, + pub GetShaderPrecisionFormat: FnPtr, + /// Fallbacks: GetShaderSourceARB + pub GetShaderSource: FnPtr, + pub GetShaderiv: FnPtr, + pub GetString: FnPtr, + pub GetStringi: FnPtr, + /// Fallbacks: GetSyncivAPPLE + pub GetSynciv: FnPtr, + pub GetTexParameterfv: FnPtr, + pub GetTexParameteriv: FnPtr, + /// Fallbacks: GetTransformFeedbackVaryingEXT + pub GetTransformFeedbackVarying: FnPtr, + pub GetUniformBlockIndex: FnPtr, + pub GetUniformIndices: FnPtr, + /// Fallbacks: GetUniformLocationARB + pub GetUniformLocation: FnPtr, + /// Fallbacks: GetUniformfvARB + pub GetUniformfv: FnPtr, + /// Fallbacks: GetUniformivARB + pub GetUniformiv: FnPtr, + /// Fallbacks: GetUniformuivEXT + pub GetUniformuiv: FnPtr, + /// Fallbacks: GetVertexAttribIivEXT + pub GetVertexAttribIiv: FnPtr, + /// Fallbacks: GetVertexAttribIuivEXT + pub GetVertexAttribIuiv: FnPtr, + /// Fallbacks: GetVertexAttribPointervARB, GetVertexAttribPointervNV + pub GetVertexAttribPointerv: FnPtr, + /// Fallbacks: GetVertexAttribfvARB, GetVertexAttribfvNV + pub GetVertexAttribfv: FnPtr, + /// Fallbacks: GetVertexAttribivARB, GetVertexAttribivNV + pub GetVertexAttribiv: FnPtr, + pub Hint: FnPtr, + pub InvalidateFramebuffer: FnPtr, + pub InvalidateSubFramebuffer: FnPtr, + /// Fallbacks: IsBufferARB + pub IsBuffer: FnPtr, + pub IsEnabled: FnPtr, + /// Fallbacks: IsFramebufferEXT + pub IsFramebuffer: FnPtr, + pub IsProgram: FnPtr, + /// Fallbacks: IsQueryARB + pub IsQuery: FnPtr, + /// Fallbacks: IsRenderbufferEXT + pub IsRenderbuffer: FnPtr, + pub IsSampler: FnPtr, + pub IsShader: FnPtr, + /// Fallbacks: IsSyncAPPLE + pub IsSync: FnPtr, + pub IsTexture: FnPtr, + /// Fallbacks: IsTransformFeedbackNV + pub IsTransformFeedback: FnPtr, + /// Fallbacks: IsVertexArrayAPPLE, IsVertexArrayOES + pub IsVertexArray: FnPtr, + pub LineWidth: FnPtr, + /// Fallbacks: LinkProgramARB + pub LinkProgram: FnPtr, + /// Fallbacks: MapBufferRangeEXT + pub MapBufferRange: FnPtr, + /// Fallbacks: PauseTransformFeedbackNV + pub PauseTransformFeedback: FnPtr, + pub PixelStorei: FnPtr, + pub PolygonOffset: FnPtr, + /// Fallbacks: ProgramBinaryOES + pub ProgramBinary: FnPtr, + /// Fallbacks: ProgramParameteriARB, ProgramParameteriEXT + pub ProgramParameteri: FnPtr, + pub ReadBuffer: FnPtr, + pub ReadPixels: FnPtr, + pub ReleaseShaderCompiler: FnPtr, + /// Fallbacks: RenderbufferStorageEXT + pub RenderbufferStorage: FnPtr, + /// Fallbacks: RenderbufferStorageMultisampleEXT, RenderbufferStorageMultisampleNV + pub RenderbufferStorageMultisample: FnPtr, + /// Fallbacks: ResumeTransformFeedbackNV + pub ResumeTransformFeedback: FnPtr, + /// Fallbacks: SampleCoverageARB + pub SampleCoverage: FnPtr, + pub SamplerParameterf: FnPtr, + pub SamplerParameterfv: FnPtr, + pub SamplerParameteri: FnPtr, + pub SamplerParameteriv: FnPtr, + pub Scissor: FnPtr, + pub ShaderBinary: FnPtr, + /// Fallbacks: ShaderSourceARB + pub ShaderSource: FnPtr, + pub StencilFunc: FnPtr, + pub StencilFuncSeparate: FnPtr, + pub StencilMask: FnPtr, + pub StencilMaskSeparate: FnPtr, + pub StencilOp: FnPtr, + /// Fallbacks: StencilOpSeparateATI + pub StencilOpSeparate: FnPtr, + pub TexImage2D: FnPtr, + /// Fallbacks: TexImage3DEXT + pub TexImage3D: FnPtr, + pub TexParameterf: FnPtr, + pub TexParameterfv: FnPtr, + pub TexParameteri: FnPtr, + pub TexParameteriv: FnPtr, + /// Fallbacks: TexStorage2DEXT + pub TexStorage2D: FnPtr, + /// Fallbacks: TexStorage3DEXT + pub TexStorage3D: FnPtr, + /// Fallbacks: TexSubImage2DEXT + pub TexSubImage2D: FnPtr, + /// Fallbacks: TexSubImage3DEXT + pub TexSubImage3D: FnPtr, + /// Fallbacks: TransformFeedbackVaryingsEXT + pub TransformFeedbackVaryings: FnPtr, + /// Fallbacks: Uniform1fARB + pub Uniform1f: FnPtr, + /// Fallbacks: Uniform1fvARB + pub Uniform1fv: FnPtr, + /// Fallbacks: Uniform1iARB + pub Uniform1i: FnPtr, + /// Fallbacks: Uniform1ivARB + pub Uniform1iv: FnPtr, + /// Fallbacks: Uniform1uiEXT + pub Uniform1ui: FnPtr, + /// Fallbacks: Uniform1uivEXT + pub Uniform1uiv: FnPtr, + /// Fallbacks: Uniform2fARB + pub Uniform2f: FnPtr, + /// Fallbacks: Uniform2fvARB + pub Uniform2fv: FnPtr, + /// Fallbacks: Uniform2iARB + pub Uniform2i: FnPtr, + /// Fallbacks: Uniform2ivARB + pub Uniform2iv: FnPtr, + /// Fallbacks: Uniform2uiEXT + pub Uniform2ui: FnPtr, + /// Fallbacks: Uniform2uivEXT + pub Uniform2uiv: FnPtr, + /// Fallbacks: Uniform3fARB + pub Uniform3f: FnPtr, + /// Fallbacks: Uniform3fvARB + pub Uniform3fv: FnPtr, + /// Fallbacks: Uniform3iARB + pub Uniform3i: FnPtr, + /// Fallbacks: Uniform3ivARB + pub Uniform3iv: FnPtr, + /// Fallbacks: Uniform3uiEXT + pub Uniform3ui: FnPtr, + /// Fallbacks: Uniform3uivEXT + pub Uniform3uiv: FnPtr, + /// Fallbacks: Uniform4fARB + pub Uniform4f: FnPtr, + /// Fallbacks: Uniform4fvARB + pub Uniform4fv: FnPtr, + /// Fallbacks: Uniform4iARB + pub Uniform4i: FnPtr, + /// Fallbacks: Uniform4ivARB + pub Uniform4iv: FnPtr, + /// Fallbacks: Uniform4uiEXT + pub Uniform4ui: FnPtr, + /// Fallbacks: Uniform4uivEXT + pub Uniform4uiv: FnPtr, + pub UniformBlockBinding: FnPtr, + /// Fallbacks: UniformMatrix2fvARB + pub UniformMatrix2fv: FnPtr, + /// Fallbacks: UniformMatrix2x3fvNV + pub UniformMatrix2x3fv: FnPtr, + /// Fallbacks: UniformMatrix2x4fvNV + pub UniformMatrix2x4fv: FnPtr, + /// Fallbacks: UniformMatrix3fvARB + pub UniformMatrix3fv: FnPtr, + /// Fallbacks: UniformMatrix3x2fvNV + pub UniformMatrix3x2fv: FnPtr, + /// Fallbacks: UniformMatrix3x4fvNV + pub UniformMatrix3x4fv: FnPtr, + /// Fallbacks: UniformMatrix4fvARB + pub UniformMatrix4fv: FnPtr, + /// Fallbacks: UniformMatrix4x2fvNV + pub UniformMatrix4x2fv: FnPtr, + /// Fallbacks: UniformMatrix4x3fvNV + pub UniformMatrix4x3fv: FnPtr, + /// Fallbacks: UnmapBufferARB, UnmapBufferOES + pub UnmapBuffer: FnPtr, + /// Fallbacks: UseProgramObjectARB + pub UseProgram: FnPtr, + /// Fallbacks: ValidateProgramARB + pub ValidateProgram: FnPtr, + /// Fallbacks: VertexAttrib1fARB, VertexAttrib1fNV + pub VertexAttrib1f: FnPtr, + /// Fallbacks: VertexAttrib1fvARB, VertexAttrib1fvNV + pub VertexAttrib1fv: FnPtr, + /// Fallbacks: VertexAttrib2fARB, VertexAttrib2fNV + pub VertexAttrib2f: FnPtr, + /// Fallbacks: VertexAttrib2fvARB, VertexAttrib2fvNV + pub VertexAttrib2fv: FnPtr, + /// Fallbacks: VertexAttrib3fARB, VertexAttrib3fNV + pub VertexAttrib3f: FnPtr, + /// Fallbacks: VertexAttrib3fvARB, VertexAttrib3fvNV + pub VertexAttrib3fv: FnPtr, + /// Fallbacks: VertexAttrib4fARB, VertexAttrib4fNV + pub VertexAttrib4f: FnPtr, + /// Fallbacks: VertexAttrib4fvARB, VertexAttrib4fvNV + pub VertexAttrib4fv: FnPtr, + /// Fallbacks: VertexAttribDivisorANGLE, VertexAttribDivisorARB, VertexAttribDivisorEXT, VertexAttribDivisorNV + pub VertexAttribDivisor: FnPtr, + /// Fallbacks: VertexAttribI4iEXT + pub VertexAttribI4i: FnPtr, + /// Fallbacks: VertexAttribI4ivEXT + pub VertexAttribI4iv: FnPtr, + /// Fallbacks: VertexAttribI4uiEXT + pub VertexAttribI4ui: FnPtr, + /// Fallbacks: VertexAttribI4uivEXT + pub VertexAttribI4uiv: FnPtr, + /// Fallbacks: VertexAttribIPointerEXT + pub VertexAttribIPointer: FnPtr, + /// Fallbacks: VertexAttribPointerARB + pub VertexAttribPointer: FnPtr, + pub Viewport: FnPtr, + /// Fallbacks: WaitSyncAPPLE + pub WaitSync: FnPtr, + _priv: (), +} + impl Gles2 { - /// Load each OpenGL symbol using a custom load function. This allows for the - /// use of functions like `glfwGetProcAddress` or `SDL_GL_GetProcAddress`. - /// - /// ~~~ignore - /// let gl = Gl::load_with(|s| glfw.get_proc_address(s)); - /// ~~~ - #[allow(dead_code, unused_variables)] - pub fn load_with(mut loadfn: F) -> Gles2 where F: FnMut(&'static str) -> *const __gl_imports::raw::c_void { - #[inline(never)] - fn do_metaloadfn(loadfn: &mut dyn FnMut(&'static str) -> *const __gl_imports::raw::c_void, - symbol: &'static str, - symbols: &[&'static str]) - -> *const __gl_imports::raw::c_void { - let mut ptr = loadfn(symbol); - if ptr.is_null() { - for &sym in symbols { - ptr = loadfn(sym); - if !ptr.is_null() { break; } - } - } - ptr + /// Load each OpenGL symbol using a custom load function. This allows for the + /// use of functions like `glfwGetProcAddress` or `SDL_GL_GetProcAddress`. + /// + /// ~~~ignore + /// let gl = Gl::load_with(|s| glfw.get_proc_address(s)); + /// ~~~ + #[allow(dead_code, unused_variables)] + pub fn load_with(mut loadfn: F) -> Gles2 where F: FnMut(&'static str) -> *const __gl_imports::raw::c_void { + #[inline(never)] + fn do_metaloadfn(loadfn: &mut dyn FnMut(&'static str) -> *const __gl_imports::raw::c_void, + symbol: &'static str, + symbols: &[&'static str]) + -> *const __gl_imports::raw::c_void { + let mut ptr = loadfn(symbol); + if ptr.is_null() { + for &sym in symbols { + ptr = loadfn(sym); + if !ptr.is_null() { break; } } - let mut metaloadfn = |symbol: &'static str, symbols: &[&'static str]| { - do_metaloadfn(&mut loadfn, symbol, symbols) - }; - Gles2 { -ActiveTexture: FnPtr::new(metaloadfn("glActiveTexture", &["glActiveTextureARB"])), -AttachShader: FnPtr::new(metaloadfn("glAttachShader", &["glAttachObjectARB"])), -BeginQuery: FnPtr::new(metaloadfn("glBeginQuery", &["glBeginQueryARB"])), -BeginTransformFeedback: FnPtr::new(metaloadfn("glBeginTransformFeedback", &["glBeginTransformFeedbackEXT", "glBeginTransformFeedbackNV"])), -BindAttribLocation: FnPtr::new(metaloadfn("glBindAttribLocation", &["glBindAttribLocationARB"])), -BindBuffer: FnPtr::new(metaloadfn("glBindBuffer", &["glBindBufferARB"])), -BindBufferBase: FnPtr::new(metaloadfn("glBindBufferBase", &["glBindBufferBaseEXT", "glBindBufferBaseNV"])), -BindBufferRange: FnPtr::new(metaloadfn("glBindBufferRange", &["glBindBufferRangeEXT", "glBindBufferRangeNV"])), -BindFramebuffer: FnPtr::new(metaloadfn("glBindFramebuffer", &[])), -BindRenderbuffer: FnPtr::new(metaloadfn("glBindRenderbuffer", &[])), -BindSampler: FnPtr::new(metaloadfn("glBindSampler", &[])), -BindTexture: FnPtr::new(metaloadfn("glBindTexture", &["glBindTextureEXT"])), -BindTransformFeedback: FnPtr::new(metaloadfn("glBindTransformFeedback", &[])), -BindVertexArray: FnPtr::new(metaloadfn("glBindVertexArray", &["glBindVertexArrayOES"])), -BlendColor: FnPtr::new(metaloadfn("glBlendColor", &["glBlendColorEXT"])), -BlendEquation: FnPtr::new(metaloadfn("glBlendEquation", &["glBlendEquationEXT"])), -BlendEquationSeparate: FnPtr::new(metaloadfn("glBlendEquationSeparate", &["glBlendEquationSeparateEXT"])), -BlendFunc: FnPtr::new(metaloadfn("glBlendFunc", &[])), -BlendFuncSeparate: FnPtr::new(metaloadfn("glBlendFuncSeparate", &["glBlendFuncSeparateEXT", "glBlendFuncSeparateINGR"])), -BlitFramebuffer: FnPtr::new(metaloadfn("glBlitFramebuffer", &["glBlitFramebufferEXT", "glBlitFramebufferNV"])), -BufferData: FnPtr::new(metaloadfn("glBufferData", &["glBufferDataARB"])), -BufferSubData: FnPtr::new(metaloadfn("glBufferSubData", &["glBufferSubDataARB"])), -CheckFramebufferStatus: FnPtr::new(metaloadfn("glCheckFramebufferStatus", &["glCheckFramebufferStatusEXT"])), -Clear: FnPtr::new(metaloadfn("glClear", &[])), -ClearBufferfi: FnPtr::new(metaloadfn("glClearBufferfi", &[])), -ClearBufferfv: FnPtr::new(metaloadfn("glClearBufferfv", &[])), -ClearBufferiv: FnPtr::new(metaloadfn("glClearBufferiv", &[])), -ClearBufferuiv: FnPtr::new(metaloadfn("glClearBufferuiv", &[])), -ClearColor: FnPtr::new(metaloadfn("glClearColor", &[])), -ClearDepthf: FnPtr::new(metaloadfn("glClearDepthf", &["glClearDepthfOES"])), -ClearStencil: FnPtr::new(metaloadfn("glClearStencil", &[])), -ClientWaitSync: FnPtr::new(metaloadfn("glClientWaitSync", &["glClientWaitSyncAPPLE"])), -ColorMask: FnPtr::new(metaloadfn("glColorMask", &[])), -CompileShader: FnPtr::new(metaloadfn("glCompileShader", &["glCompileShaderARB"])), -CompressedTexImage2D: FnPtr::new(metaloadfn("glCompressedTexImage2D", &["glCompressedTexImage2DARB"])), -CompressedTexImage3D: FnPtr::new(metaloadfn("glCompressedTexImage3D", &["glCompressedTexImage3DARB"])), -CompressedTexSubImage2D: FnPtr::new(metaloadfn("glCompressedTexSubImage2D", &["glCompressedTexSubImage2DARB"])), -CompressedTexSubImage3D: FnPtr::new(metaloadfn("glCompressedTexSubImage3D", &["glCompressedTexSubImage3DARB"])), -CopyBufferSubData: FnPtr::new(metaloadfn("glCopyBufferSubData", &["glCopyBufferSubDataNV"])), -CopyTexImage2D: FnPtr::new(metaloadfn("glCopyTexImage2D", &["glCopyTexImage2DEXT"])), -CopyTexSubImage2D: FnPtr::new(metaloadfn("glCopyTexSubImage2D", &["glCopyTexSubImage2DEXT"])), -CopyTexSubImage3D: FnPtr::new(metaloadfn("glCopyTexSubImage3D", &["glCopyTexSubImage3DEXT"])), -CreateProgram: FnPtr::new(metaloadfn("glCreateProgram", &["glCreateProgramObjectARB"])), -CreateShader: FnPtr::new(metaloadfn("glCreateShader", &["glCreateShaderObjectARB"])), -CullFace: FnPtr::new(metaloadfn("glCullFace", &[])), -DeleteBuffers: FnPtr::new(metaloadfn("glDeleteBuffers", &["glDeleteBuffersARB"])), -DeleteFramebuffers: FnPtr::new(metaloadfn("glDeleteFramebuffers", &["glDeleteFramebuffersEXT"])), -DeleteProgram: FnPtr::new(metaloadfn("glDeleteProgram", &[])), -DeleteQueries: FnPtr::new(metaloadfn("glDeleteQueries", &["glDeleteQueriesARB"])), -DeleteRenderbuffers: FnPtr::new(metaloadfn("glDeleteRenderbuffers", &["glDeleteRenderbuffersEXT"])), -DeleteSamplers: FnPtr::new(metaloadfn("glDeleteSamplers", &[])), -DeleteShader: FnPtr::new(metaloadfn("glDeleteShader", &[])), -DeleteSync: FnPtr::new(metaloadfn("glDeleteSync", &["glDeleteSyncAPPLE"])), -DeleteTextures: FnPtr::new(metaloadfn("glDeleteTextures", &[])), -DeleteTransformFeedbacks: FnPtr::new(metaloadfn("glDeleteTransformFeedbacks", &["glDeleteTransformFeedbacksNV"])), -DeleteVertexArrays: FnPtr::new(metaloadfn("glDeleteVertexArrays", &["glDeleteVertexArraysAPPLE", "glDeleteVertexArraysOES"])), -DepthFunc: FnPtr::new(metaloadfn("glDepthFunc", &[])), -DepthMask: FnPtr::new(metaloadfn("glDepthMask", &[])), -DepthRangef: FnPtr::new(metaloadfn("glDepthRangef", &["glDepthRangefOES"])), -DetachShader: FnPtr::new(metaloadfn("glDetachShader", &["glDetachObjectARB"])), -Disable: FnPtr::new(metaloadfn("glDisable", &[])), -DisableVertexAttribArray: FnPtr::new(metaloadfn("glDisableVertexAttribArray", &["glDisableVertexAttribArrayARB"])), -DrawArrays: FnPtr::new(metaloadfn("glDrawArrays", &["glDrawArraysEXT"])), -DrawArraysInstanced: FnPtr::new(metaloadfn("glDrawArraysInstanced", &["glDrawArraysInstancedANGLE", "glDrawArraysInstancedARB", "glDrawArraysInstancedEXT", "glDrawArraysInstancedNV"])), -DrawBuffers: FnPtr::new(metaloadfn("glDrawBuffers", &["glDrawBuffersARB", "glDrawBuffersATI", "glDrawBuffersEXT"])), -DrawElements: FnPtr::new(metaloadfn("glDrawElements", &[])), -DrawElementsInstanced: FnPtr::new(metaloadfn("glDrawElementsInstanced", &["glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB", "glDrawElementsInstancedEXT", "glDrawElementsInstancedNV"])), -DrawRangeElements: FnPtr::new(metaloadfn("glDrawRangeElements", &["glDrawRangeElementsEXT"])), -Enable: FnPtr::new(metaloadfn("glEnable", &[])), -EnableVertexAttribArray: FnPtr::new(metaloadfn("glEnableVertexAttribArray", &["glEnableVertexAttribArrayARB"])), -EndQuery: FnPtr::new(metaloadfn("glEndQuery", &["glEndQueryARB"])), -EndTransformFeedback: FnPtr::new(metaloadfn("glEndTransformFeedback", &["glEndTransformFeedbackEXT", "glEndTransformFeedbackNV"])), -FenceSync: FnPtr::new(metaloadfn("glFenceSync", &["glFenceSyncAPPLE"])), -Finish: FnPtr::new(metaloadfn("glFinish", &[])), -Flush: FnPtr::new(metaloadfn("glFlush", &[])), -FlushMappedBufferRange: FnPtr::new(metaloadfn("glFlushMappedBufferRange", &["glFlushMappedBufferRangeAPPLE", "glFlushMappedBufferRangeEXT"])), -FramebufferRenderbuffer: FnPtr::new(metaloadfn("glFramebufferRenderbuffer", &["glFramebufferRenderbufferEXT"])), -FramebufferTexture2D: FnPtr::new(metaloadfn("glFramebufferTexture2D", &["glFramebufferTexture2DEXT"])), -FramebufferTextureLayer: FnPtr::new(metaloadfn("glFramebufferTextureLayer", &["glFramebufferTextureLayerARB", "glFramebufferTextureLayerEXT"])), -FrontFace: FnPtr::new(metaloadfn("glFrontFace", &[])), -GenBuffers: FnPtr::new(metaloadfn("glGenBuffers", &["glGenBuffersARB"])), -GenFramebuffers: FnPtr::new(metaloadfn("glGenFramebuffers", &["glGenFramebuffersEXT"])), -GenQueries: FnPtr::new(metaloadfn("glGenQueries", &["glGenQueriesARB"])), -GenRenderbuffers: FnPtr::new(metaloadfn("glGenRenderbuffers", &["glGenRenderbuffersEXT"])), -GenSamplers: FnPtr::new(metaloadfn("glGenSamplers", &[])), -GenTextures: FnPtr::new(metaloadfn("glGenTextures", &[])), -GenTransformFeedbacks: FnPtr::new(metaloadfn("glGenTransformFeedbacks", &["glGenTransformFeedbacksNV"])), -GenVertexArrays: FnPtr::new(metaloadfn("glGenVertexArrays", &["glGenVertexArraysAPPLE", "glGenVertexArraysOES"])), -GenerateMipmap: FnPtr::new(metaloadfn("glGenerateMipmap", &["glGenerateMipmapEXT"])), -GetActiveAttrib: FnPtr::new(metaloadfn("glGetActiveAttrib", &["glGetActiveAttribARB"])), -GetActiveUniform: FnPtr::new(metaloadfn("glGetActiveUniform", &["glGetActiveUniformARB"])), -GetActiveUniformBlockName: FnPtr::new(metaloadfn("glGetActiveUniformBlockName", &[])), -GetActiveUniformBlockiv: FnPtr::new(metaloadfn("glGetActiveUniformBlockiv", &[])), -GetActiveUniformsiv: FnPtr::new(metaloadfn("glGetActiveUniformsiv", &[])), -GetAttachedShaders: FnPtr::new(metaloadfn("glGetAttachedShaders", &[])), -GetAttribLocation: FnPtr::new(metaloadfn("glGetAttribLocation", &["glGetAttribLocationARB"])), -GetBooleanv: FnPtr::new(metaloadfn("glGetBooleanv", &[])), -GetBufferParameteri64v: FnPtr::new(metaloadfn("glGetBufferParameteri64v", &[])), -GetBufferParameteriv: FnPtr::new(metaloadfn("glGetBufferParameteriv", &["glGetBufferParameterivARB"])), -GetBufferPointerv: FnPtr::new(metaloadfn("glGetBufferPointerv", &["glGetBufferPointervARB", "glGetBufferPointervOES"])), -GetError: FnPtr::new(metaloadfn("glGetError", &[])), -GetFloatv: FnPtr::new(metaloadfn("glGetFloatv", &[])), -GetFragDataLocation: FnPtr::new(metaloadfn("glGetFragDataLocation", &["glGetFragDataLocationEXT"])), -GetFramebufferAttachmentParameteriv: FnPtr::new(metaloadfn("glGetFramebufferAttachmentParameteriv", &["glGetFramebufferAttachmentParameterivEXT"])), -GetInteger64i_v: FnPtr::new(metaloadfn("glGetInteger64i_v", &[])), -GetInteger64v: FnPtr::new(metaloadfn("glGetInteger64v", &["glGetInteger64vAPPLE"])), -GetIntegeri_v: FnPtr::new(metaloadfn("glGetIntegeri_v", &["glGetIntegerIndexedvEXT"])), -GetIntegerv: FnPtr::new(metaloadfn("glGetIntegerv", &[])), -GetInternalformativ: FnPtr::new(metaloadfn("glGetInternalformativ", &[])), -GetProgramBinary: FnPtr::new(metaloadfn("glGetProgramBinary", &["glGetProgramBinaryOES"])), -GetProgramInfoLog: FnPtr::new(metaloadfn("glGetProgramInfoLog", &[])), -GetProgramiv: FnPtr::new(metaloadfn("glGetProgramiv", &[])), -GetQueryObjectuiv: FnPtr::new(metaloadfn("glGetQueryObjectuiv", &["glGetQueryObjectuivARB"])), -GetQueryiv: FnPtr::new(metaloadfn("glGetQueryiv", &["glGetQueryivARB"])), -GetRenderbufferParameteriv: FnPtr::new(metaloadfn("glGetRenderbufferParameteriv", &["glGetRenderbufferParameterivEXT"])), -GetSamplerParameterfv: FnPtr::new(metaloadfn("glGetSamplerParameterfv", &[])), -GetSamplerParameteriv: FnPtr::new(metaloadfn("glGetSamplerParameteriv", &[])), -GetShaderInfoLog: FnPtr::new(metaloadfn("glGetShaderInfoLog", &[])), -GetShaderPrecisionFormat: FnPtr::new(metaloadfn("glGetShaderPrecisionFormat", &[])), -GetShaderSource: FnPtr::new(metaloadfn("glGetShaderSource", &["glGetShaderSourceARB"])), -GetShaderiv: FnPtr::new(metaloadfn("glGetShaderiv", &[])), -GetString: FnPtr::new(metaloadfn("glGetString", &[])), -GetStringi: FnPtr::new(metaloadfn("glGetStringi", &[])), -GetSynciv: FnPtr::new(metaloadfn("glGetSynciv", &["glGetSyncivAPPLE"])), -GetTexParameterfv: FnPtr::new(metaloadfn("glGetTexParameterfv", &[])), -GetTexParameteriv: FnPtr::new(metaloadfn("glGetTexParameteriv", &[])), -GetTransformFeedbackVarying: FnPtr::new(metaloadfn("glGetTransformFeedbackVarying", &["glGetTransformFeedbackVaryingEXT"])), -GetUniformBlockIndex: FnPtr::new(metaloadfn("glGetUniformBlockIndex", &[])), -GetUniformIndices: FnPtr::new(metaloadfn("glGetUniformIndices", &[])), -GetUniformLocation: FnPtr::new(metaloadfn("glGetUniformLocation", &["glGetUniformLocationARB"])), -GetUniformfv: FnPtr::new(metaloadfn("glGetUniformfv", &["glGetUniformfvARB"])), -GetUniformiv: FnPtr::new(metaloadfn("glGetUniformiv", &["glGetUniformivARB"])), -GetUniformuiv: FnPtr::new(metaloadfn("glGetUniformuiv", &["glGetUniformuivEXT"])), -GetVertexAttribIiv: FnPtr::new(metaloadfn("glGetVertexAttribIiv", &["glGetVertexAttribIivEXT"])), -GetVertexAttribIuiv: FnPtr::new(metaloadfn("glGetVertexAttribIuiv", &["glGetVertexAttribIuivEXT"])), -GetVertexAttribPointerv: FnPtr::new(metaloadfn("glGetVertexAttribPointerv", &["glGetVertexAttribPointervARB", "glGetVertexAttribPointervNV"])), -GetVertexAttribfv: FnPtr::new(metaloadfn("glGetVertexAttribfv", &["glGetVertexAttribfvARB", "glGetVertexAttribfvNV"])), -GetVertexAttribiv: FnPtr::new(metaloadfn("glGetVertexAttribiv", &["glGetVertexAttribivARB", "glGetVertexAttribivNV"])), -Hint: FnPtr::new(metaloadfn("glHint", &[])), -InvalidateFramebuffer: FnPtr::new(metaloadfn("glInvalidateFramebuffer", &[])), -InvalidateSubFramebuffer: FnPtr::new(metaloadfn("glInvalidateSubFramebuffer", &[])), -IsBuffer: FnPtr::new(metaloadfn("glIsBuffer", &["glIsBufferARB"])), -IsEnabled: FnPtr::new(metaloadfn("glIsEnabled", &[])), -IsFramebuffer: FnPtr::new(metaloadfn("glIsFramebuffer", &["glIsFramebufferEXT"])), -IsProgram: FnPtr::new(metaloadfn("glIsProgram", &[])), -IsQuery: FnPtr::new(metaloadfn("glIsQuery", &["glIsQueryARB"])), -IsRenderbuffer: FnPtr::new(metaloadfn("glIsRenderbuffer", &["glIsRenderbufferEXT"])), -IsSampler: FnPtr::new(metaloadfn("glIsSampler", &[])), -IsShader: FnPtr::new(metaloadfn("glIsShader", &[])), -IsSync: FnPtr::new(metaloadfn("glIsSync", &["glIsSyncAPPLE"])), -IsTexture: FnPtr::new(metaloadfn("glIsTexture", &[])), -IsTransformFeedback: FnPtr::new(metaloadfn("glIsTransformFeedback", &["glIsTransformFeedbackNV"])), -IsVertexArray: FnPtr::new(metaloadfn("glIsVertexArray", &["glIsVertexArrayAPPLE", "glIsVertexArrayOES"])), -LineWidth: FnPtr::new(metaloadfn("glLineWidth", &[])), -LinkProgram: FnPtr::new(metaloadfn("glLinkProgram", &["glLinkProgramARB"])), -MapBufferRange: FnPtr::new(metaloadfn("glMapBufferRange", &["glMapBufferRangeEXT"])), -PauseTransformFeedback: FnPtr::new(metaloadfn("glPauseTransformFeedback", &["glPauseTransformFeedbackNV"])), -PixelStorei: FnPtr::new(metaloadfn("glPixelStorei", &[])), -PolygonOffset: FnPtr::new(metaloadfn("glPolygonOffset", &[])), -ProgramBinary: FnPtr::new(metaloadfn("glProgramBinary", &["glProgramBinaryOES"])), -ProgramParameteri: FnPtr::new(metaloadfn("glProgramParameteri", &["glProgramParameteriARB", "glProgramParameteriEXT"])), -ReadBuffer: FnPtr::new(metaloadfn("glReadBuffer", &[])), -ReadPixels: FnPtr::new(metaloadfn("glReadPixels", &[])), -ReleaseShaderCompiler: FnPtr::new(metaloadfn("glReleaseShaderCompiler", &[])), -RenderbufferStorage: FnPtr::new(metaloadfn("glRenderbufferStorage", &["glRenderbufferStorageEXT"])), -RenderbufferStorageMultisample: FnPtr::new(metaloadfn("glRenderbufferStorageMultisample", &["glRenderbufferStorageMultisampleEXT", "glRenderbufferStorageMultisampleNV"])), -ResumeTransformFeedback: FnPtr::new(metaloadfn("glResumeTransformFeedback", &["glResumeTransformFeedbackNV"])), -SampleCoverage: FnPtr::new(metaloadfn("glSampleCoverage", &["glSampleCoverageARB"])), -SamplerParameterf: FnPtr::new(metaloadfn("glSamplerParameterf", &[])), -SamplerParameterfv: FnPtr::new(metaloadfn("glSamplerParameterfv", &[])), -SamplerParameteri: FnPtr::new(metaloadfn("glSamplerParameteri", &[])), -SamplerParameteriv: FnPtr::new(metaloadfn("glSamplerParameteriv", &[])), -Scissor: FnPtr::new(metaloadfn("glScissor", &[])), -ShaderBinary: FnPtr::new(metaloadfn("glShaderBinary", &[])), -ShaderSource: FnPtr::new(metaloadfn("glShaderSource", &["glShaderSourceARB"])), -StencilFunc: FnPtr::new(metaloadfn("glStencilFunc", &[])), -StencilFuncSeparate: FnPtr::new(metaloadfn("glStencilFuncSeparate", &[])), -StencilMask: FnPtr::new(metaloadfn("glStencilMask", &[])), -StencilMaskSeparate: FnPtr::new(metaloadfn("glStencilMaskSeparate", &[])), -StencilOp: FnPtr::new(metaloadfn("glStencilOp", &[])), -StencilOpSeparate: FnPtr::new(metaloadfn("glStencilOpSeparate", &["glStencilOpSeparateATI"])), -TexImage2D: FnPtr::new(metaloadfn("glTexImage2D", &[])), -TexImage3D: FnPtr::new(metaloadfn("glTexImage3D", &["glTexImage3DEXT"])), -TexParameterf: FnPtr::new(metaloadfn("glTexParameterf", &[])), -TexParameterfv: FnPtr::new(metaloadfn("glTexParameterfv", &[])), -TexParameteri: FnPtr::new(metaloadfn("glTexParameteri", &[])), -TexParameteriv: FnPtr::new(metaloadfn("glTexParameteriv", &[])), -TexStorage2D: FnPtr::new(metaloadfn("glTexStorage2D", &["glTexStorage2DEXT"])), -TexStorage3D: FnPtr::new(metaloadfn("glTexStorage3D", &["glTexStorage3DEXT"])), -TexSubImage2D: FnPtr::new(metaloadfn("glTexSubImage2D", &["glTexSubImage2DEXT"])), -TexSubImage3D: FnPtr::new(metaloadfn("glTexSubImage3D", &["glTexSubImage3DEXT"])), -TransformFeedbackVaryings: FnPtr::new(metaloadfn("glTransformFeedbackVaryings", &["glTransformFeedbackVaryingsEXT"])), -Uniform1f: FnPtr::new(metaloadfn("glUniform1f", &["glUniform1fARB"])), -Uniform1fv: FnPtr::new(metaloadfn("glUniform1fv", &["glUniform1fvARB"])), -Uniform1i: FnPtr::new(metaloadfn("glUniform1i", &["glUniform1iARB"])), -Uniform1iv: FnPtr::new(metaloadfn("glUniform1iv", &["glUniform1ivARB"])), -Uniform1ui: FnPtr::new(metaloadfn("glUniform1ui", &["glUniform1uiEXT"])), -Uniform1uiv: FnPtr::new(metaloadfn("glUniform1uiv", &["glUniform1uivEXT"])), -Uniform2f: FnPtr::new(metaloadfn("glUniform2f", &["glUniform2fARB"])), -Uniform2fv: FnPtr::new(metaloadfn("glUniform2fv", &["glUniform2fvARB"])), -Uniform2i: FnPtr::new(metaloadfn("glUniform2i", &["glUniform2iARB"])), -Uniform2iv: FnPtr::new(metaloadfn("glUniform2iv", &["glUniform2ivARB"])), -Uniform2ui: FnPtr::new(metaloadfn("glUniform2ui", &["glUniform2uiEXT"])), -Uniform2uiv: FnPtr::new(metaloadfn("glUniform2uiv", &["glUniform2uivEXT"])), -Uniform3f: FnPtr::new(metaloadfn("glUniform3f", &["glUniform3fARB"])), -Uniform3fv: FnPtr::new(metaloadfn("glUniform3fv", &["glUniform3fvARB"])), -Uniform3i: FnPtr::new(metaloadfn("glUniform3i", &["glUniform3iARB"])), -Uniform3iv: FnPtr::new(metaloadfn("glUniform3iv", &["glUniform3ivARB"])), -Uniform3ui: FnPtr::new(metaloadfn("glUniform3ui", &["glUniform3uiEXT"])), -Uniform3uiv: FnPtr::new(metaloadfn("glUniform3uiv", &["glUniform3uivEXT"])), -Uniform4f: FnPtr::new(metaloadfn("glUniform4f", &["glUniform4fARB"])), -Uniform4fv: FnPtr::new(metaloadfn("glUniform4fv", &["glUniform4fvARB"])), -Uniform4i: FnPtr::new(metaloadfn("glUniform4i", &["glUniform4iARB"])), -Uniform4iv: FnPtr::new(metaloadfn("glUniform4iv", &["glUniform4ivARB"])), -Uniform4ui: FnPtr::new(metaloadfn("glUniform4ui", &["glUniform4uiEXT"])), -Uniform4uiv: FnPtr::new(metaloadfn("glUniform4uiv", &["glUniform4uivEXT"])), -UniformBlockBinding: FnPtr::new(metaloadfn("glUniformBlockBinding", &[])), -UniformMatrix2fv: FnPtr::new(metaloadfn("glUniformMatrix2fv", &["glUniformMatrix2fvARB"])), -UniformMatrix2x3fv: FnPtr::new(metaloadfn("glUniformMatrix2x3fv", &["glUniformMatrix2x3fvNV"])), -UniformMatrix2x4fv: FnPtr::new(metaloadfn("glUniformMatrix2x4fv", &["glUniformMatrix2x4fvNV"])), -UniformMatrix3fv: FnPtr::new(metaloadfn("glUniformMatrix3fv", &["glUniformMatrix3fvARB"])), -UniformMatrix3x2fv: FnPtr::new(metaloadfn("glUniformMatrix3x2fv", &["glUniformMatrix3x2fvNV"])), -UniformMatrix3x4fv: FnPtr::new(metaloadfn("glUniformMatrix3x4fv", &["glUniformMatrix3x4fvNV"])), -UniformMatrix4fv: FnPtr::new(metaloadfn("glUniformMatrix4fv", &["glUniformMatrix4fvARB"])), -UniformMatrix4x2fv: FnPtr::new(metaloadfn("glUniformMatrix4x2fv", &["glUniformMatrix4x2fvNV"])), -UniformMatrix4x3fv: FnPtr::new(metaloadfn("glUniformMatrix4x3fv", &["glUniformMatrix4x3fvNV"])), -UnmapBuffer: FnPtr::new(metaloadfn("glUnmapBuffer", &["glUnmapBufferARB", "glUnmapBufferOES"])), -UseProgram: FnPtr::new(metaloadfn("glUseProgram", &["glUseProgramObjectARB"])), -ValidateProgram: FnPtr::new(metaloadfn("glValidateProgram", &["glValidateProgramARB"])), -VertexAttrib1f: FnPtr::new(metaloadfn("glVertexAttrib1f", &["glVertexAttrib1fARB", "glVertexAttrib1fNV"])), -VertexAttrib1fv: FnPtr::new(metaloadfn("glVertexAttrib1fv", &["glVertexAttrib1fvARB", "glVertexAttrib1fvNV"])), -VertexAttrib2f: FnPtr::new(metaloadfn("glVertexAttrib2f", &["glVertexAttrib2fARB", "glVertexAttrib2fNV"])), -VertexAttrib2fv: FnPtr::new(metaloadfn("glVertexAttrib2fv", &["glVertexAttrib2fvARB", "glVertexAttrib2fvNV"])), -VertexAttrib3f: FnPtr::new(metaloadfn("glVertexAttrib3f", &["glVertexAttrib3fARB", "glVertexAttrib3fNV"])), -VertexAttrib3fv: FnPtr::new(metaloadfn("glVertexAttrib3fv", &["glVertexAttrib3fvARB", "glVertexAttrib3fvNV"])), -VertexAttrib4f: FnPtr::new(metaloadfn("glVertexAttrib4f", &["glVertexAttrib4fARB", "glVertexAttrib4fNV"])), -VertexAttrib4fv: FnPtr::new(metaloadfn("glVertexAttrib4fv", &["glVertexAttrib4fvARB", "glVertexAttrib4fvNV"])), -VertexAttribDivisor: FnPtr::new(metaloadfn("glVertexAttribDivisor", &["glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB", "glVertexAttribDivisorEXT", "glVertexAttribDivisorNV"])), -VertexAttribI4i: FnPtr::new(metaloadfn("glVertexAttribI4i", &["glVertexAttribI4iEXT"])), -VertexAttribI4iv: FnPtr::new(metaloadfn("glVertexAttribI4iv", &["glVertexAttribI4ivEXT"])), -VertexAttribI4ui: FnPtr::new(metaloadfn("glVertexAttribI4ui", &["glVertexAttribI4uiEXT"])), -VertexAttribI4uiv: FnPtr::new(metaloadfn("glVertexAttribI4uiv", &["glVertexAttribI4uivEXT"])), -VertexAttribIPointer: FnPtr::new(metaloadfn("glVertexAttribIPointer", &["glVertexAttribIPointerEXT"])), -VertexAttribPointer: FnPtr::new(metaloadfn("glVertexAttribPointer", &["glVertexAttribPointerARB"])), -Viewport: FnPtr::new(metaloadfn("glViewport", &[])), -WaitSync: FnPtr::new(metaloadfn("glWaitSync", &["glWaitSyncAPPLE"])), -_priv: () -} + } + ptr } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ActiveTexture(&self, texture: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.ActiveTexture.f)(texture) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn AttachShader(&self, program: types::GLuint, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.AttachShader.f)(program, shader) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BeginQuery(&self, target: types::GLenum, id: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BeginQuery.f)(target, id) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BeginTransformFeedback(&self, primitiveMode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.BeginTransformFeedback.f)(primitiveMode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindAttribLocation(&self, program: types::GLuint, index: types::GLuint, name: *const types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, *const types::GLchar) -> ()>(self.BindAttribLocation.f)(program, index, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindBuffer(&self, target: types::GLenum, buffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindBuffer.f)(target, buffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindBufferBase(&self, target: types::GLenum, index: types::GLuint, buffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint) -> ()>(self.BindBufferBase.f)(target, index, buffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindBufferRange(&self, target: types::GLenum, index: types::GLuint, buffer: types::GLuint, offset: types::GLintptr, size: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint, types::GLintptr, types::GLsizeiptr) -> ()>(self.BindBufferRange.f)(target, index, buffer, offset, size) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindFramebuffer(&self, target: types::GLenum, framebuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindFramebuffer.f)(target, framebuffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindRenderbuffer(&self, target: types::GLenum, renderbuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindRenderbuffer.f)(target, renderbuffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindSampler(&self, unit: types::GLuint, sampler: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.BindSampler.f)(unit, sampler) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindTexture(&self, target: types::GLenum, texture: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindTexture.f)(target, texture) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindTransformFeedback(&self, target: types::GLenum, id: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindTransformFeedback.f)(target, id) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BindVertexArray(&self, array: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.BindVertexArray.f)(array) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlendColor(&self, red: types::GLfloat, green: types::GLfloat, blue: types::GLfloat, alpha: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.BlendColor.f)(red, green, blue, alpha) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlendEquation(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.BlendEquation.f)(mode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlendEquationSeparate(&self, modeRGB: types::GLenum, modeAlpha: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.BlendEquationSeparate.f)(modeRGB, modeAlpha) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlendFunc(&self, sfactor: types::GLenum, dfactor: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.BlendFunc.f)(sfactor, dfactor) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlendFuncSeparate(&self, sfactorRGB: types::GLenum, dfactorRGB: types::GLenum, sfactorAlpha: types::GLenum, dfactorAlpha: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLenum) -> ()>(self.BlendFuncSeparate.f)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BlitFramebuffer(&self, srcX0: types::GLint, srcY0: types::GLint, srcX1: types::GLint, srcY1: types::GLint, dstX0: types::GLint, dstY0: types::GLint, dstX1: types::GLint, dstY1: types::GLint, mask: types::GLbitfield, filter: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLbitfield, types::GLenum) -> ()>(self.BlitFramebuffer.f)(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BufferData(&self, target: types::GLenum, size: types::GLsizeiptr, data: *const __gl_imports::raw::c_void, usage: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizeiptr, *const __gl_imports::raw::c_void, types::GLenum) -> ()>(self.BufferData.f)(target, size, data, usage) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn BufferSubData(&self, target: types::GLenum, offset: types::GLintptr, size: types::GLsizeiptr, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr, *const __gl_imports::raw::c_void) -> ()>(self.BufferSubData.f)(target, offset, size, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CheckFramebufferStatus(&self, target: types::GLenum) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLenum>(self.CheckFramebufferStatus.f)(target) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Clear(&self, mask: types::GLbitfield) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLbitfield) -> ()>(self.Clear.f)(mask) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearBufferfi(&self, buffer: types::GLenum, drawbuffer: types::GLint, depth: types::GLfloat, stencil: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLfloat, types::GLint) -> ()>(self.ClearBufferfi.f)(buffer, drawbuffer, depth, stencil) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearBufferfv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLfloat) -> ()>(self.ClearBufferfv.f)(buffer, drawbuffer, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearBufferiv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLint) -> ()>(self.ClearBufferiv.f)(buffer, drawbuffer, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearBufferuiv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLuint) -> ()>(self.ClearBufferuiv.f)(buffer, drawbuffer, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearColor(&self, red: types::GLfloat, green: types::GLfloat, blue: types::GLfloat, alpha: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.ClearColor.f)(red, green, blue, alpha) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearDepthf(&self, d: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat) -> ()>(self.ClearDepthf.f)(d) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClearStencil(&self, s: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint) -> ()>(self.ClearStencil.f)(s) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ClientWaitSync(&self, sync: types::GLsync, flags: types::GLbitfield, timeout: types::GLuint64) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLbitfield, types::GLuint64) -> types::GLenum>(self.ClientWaitSync.f)(sync, flags, timeout) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ColorMask(&self, red: types::GLboolean, green: types::GLboolean, blue: types::GLboolean, alpha: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLboolean, types::GLboolean, types::GLboolean, types::GLboolean) -> ()>(self.ColorMask.f)(red, green, blue, alpha) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CompileShader(&self, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.CompileShader.f)(shader) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CompressedTexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, border: types::GLint, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLsizei, types::GLsizei, types::GLint, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexImage2D.f)(target, level, internalformat, width, height, border, imageSize, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CompressedTexImage3D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, border: types::GLint, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLsizei, types::GLsizei, types::GLsizei, types::GLint, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexImage3D.f)(target, level, internalformat, width, height, depth, border, imageSize, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CompressedTexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexSubImage2D.f)(target, level, xoffset, yoffset, width, height, format, imageSize, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CompressedTexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, format: types::GLenum, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CopyBufferSubData(&self, readTarget: types::GLenum, writeTarget: types::GLenum, readOffset: types::GLintptr, writeOffset: types::GLintptr, size: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLintptr, types::GLintptr, types::GLsizeiptr) -> ()>(self.CopyBufferSubData.f)(readTarget, writeTarget, readOffset, writeOffset, size) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CopyTexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei, border: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLint) -> ()>(self.CopyTexImage2D.f)(target, level, internalformat, x, y, width, height, border) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CopyTexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.CopyTexSubImage2D.f)(target, level, xoffset, yoffset, x, y, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CopyTexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.CopyTexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, x, y, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CreateProgram(&self, ) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn() -> types::GLuint>(self.CreateProgram.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CreateShader(&self, type_: types::GLenum) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLuint>(self.CreateShader.f)(type_) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn CullFace(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.CullFace.f)(mode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteBuffers(&self, n: types::GLsizei, buffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteBuffers.f)(n, buffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteFramebuffers(&self, n: types::GLsizei, framebuffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteFramebuffers.f)(n, framebuffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DeleteProgram.f)(program) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteQueries(&self, n: types::GLsizei, ids: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteQueries.f)(n, ids) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteRenderbuffers(&self, n: types::GLsizei, renderbuffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteRenderbuffers.f)(n, renderbuffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteSamplers(&self, count: types::GLsizei, samplers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteSamplers.f)(count, samplers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteShader(&self, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DeleteShader.f)(shader) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteSync(&self, sync: types::GLsync) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync) -> ()>(self.DeleteSync.f)(sync) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteTextures(&self, n: types::GLsizei, textures: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteTextures.f)(n, textures) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteTransformFeedbacks(&self, n: types::GLsizei, ids: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteTransformFeedbacks.f)(n, ids) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DeleteVertexArrays(&self, n: types::GLsizei, arrays: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteVertexArrays.f)(n, arrays) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DepthFunc(&self, func: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.DepthFunc.f)(func) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DepthMask(&self, flag: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLboolean) -> ()>(self.DepthMask.f)(flag) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DepthRangef(&self, n: types::GLfloat, f: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat) -> ()>(self.DepthRangef.f)(n, f) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DetachShader(&self, program: types::GLuint, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.DetachShader.f)(program, shader) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Disable(&self, cap: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.Disable.f)(cap) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DisableVertexAttribArray(&self, index: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DisableVertexAttribArray.f)(index) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawArrays(&self, mode: types::GLenum, first: types::GLint, count: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLsizei) -> ()>(self.DrawArrays.f)(mode, first, count) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawArraysInstanced(&self, mode: types::GLenum, first: types::GLint, count: types::GLsizei, instancecount: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.DrawArraysInstanced.f)(mode, first, count, instancecount) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawBuffers(&self, n: types::GLsizei, bufs: *const types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLenum) -> ()>(self.DrawBuffers.f)(n, bufs) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawElements(&self, mode: types::GLenum, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.DrawElements.f)(mode, count, type_, indices) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawElementsInstanced(&self, mode: types::GLenum, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void, instancecount: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.DrawElementsInstanced.f)(mode, count, type_, indices, instancecount) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn DrawRangeElements(&self, mode: types::GLenum, start: types::GLuint, end: types::GLuint, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.DrawRangeElements.f)(mode, start, end, count, type_, indices) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Enable(&self, cap: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.Enable.f)(cap) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn EnableVertexAttribArray(&self, index: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.EnableVertexAttribArray.f)(index) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn EndQuery(&self, target: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.EndQuery.f)(target) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn EndTransformFeedback(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.EndTransformFeedback.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FenceSync(&self, condition: types::GLenum, flags: types::GLbitfield) -> types::GLsync { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLbitfield) -> types::GLsync>(self.FenceSync.f)(condition, flags) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Finish(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.Finish.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Flush(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.Flush.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FlushMappedBufferRange(&self, target: types::GLenum, offset: types::GLintptr, length: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr) -> ()>(self.FlushMappedBufferRange.f)(target, offset, length) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FramebufferRenderbuffer(&self, target: types::GLenum, attachment: types::GLenum, renderbuffertarget: types::GLenum, renderbuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLuint) -> ()>(self.FramebufferRenderbuffer.f)(target, attachment, renderbuffertarget, renderbuffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FramebufferTexture2D(&self, target: types::GLenum, attachment: types::GLenum, textarget: types::GLenum, texture: types::GLuint, level: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLuint, types::GLint) -> ()>(self.FramebufferTexture2D.f)(target, attachment, textarget, texture, level) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FramebufferTextureLayer(&self, target: types::GLenum, attachment: types::GLenum, texture: types::GLuint, level: types::GLint, layer: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLuint, types::GLint, types::GLint) -> ()>(self.FramebufferTextureLayer.f)(target, attachment, texture, level, layer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn FrontFace(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.FrontFace.f)(mode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenBuffers(&self, n: types::GLsizei, buffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenBuffers.f)(n, buffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenFramebuffers(&self, n: types::GLsizei, framebuffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenFramebuffers.f)(n, framebuffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenQueries(&self, n: types::GLsizei, ids: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenQueries.f)(n, ids) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenRenderbuffers(&self, n: types::GLsizei, renderbuffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenRenderbuffers.f)(n, renderbuffers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenSamplers(&self, count: types::GLsizei, samplers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenSamplers.f)(count, samplers) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenTextures(&self, n: types::GLsizei, textures: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenTextures.f)(n, textures) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenTransformFeedbacks(&self, n: types::GLsizei, ids: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenTransformFeedbacks.f)(n, ids) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenVertexArrays(&self, n: types::GLsizei, arrays: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenVertexArrays.f)(n, arrays) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GenerateMipmap(&self, target: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.GenerateMipmap.f)(target) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetActiveAttrib(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLint, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLint, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetActiveAttrib.f)(program, index, bufSize, length, size, type_, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetActiveUniform(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLint, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLint, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetActiveUniform.f)(program, index, bufSize, length, size, type_, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetActiveUniformBlockName(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, uniformBlockName: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetActiveUniformBlockName.f)(program, uniformBlockIndex, bufSize, length, uniformBlockName) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetActiveUniformBlockiv(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetActiveUniformBlockiv.f)(program, uniformBlockIndex, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetActiveUniformsiv(&self, program: types::GLuint, uniformCount: types::GLsizei, uniformIndices: *const types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetActiveUniformsiv.f)(program, uniformCount, uniformIndices, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetAttachedShaders(&self, program: types::GLuint, maxCount: types::GLsizei, count: *mut types::GLsizei, shaders: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLuint) -> ()>(self.GetAttachedShaders.f)(program, maxCount, count, shaders) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetAttribLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetAttribLocation.f)(program, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetBooleanv(&self, pname: types::GLenum, data: *mut types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLboolean) -> ()>(self.GetBooleanv.f)(pname, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetBufferParameteri64v(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint64) -> ()>(self.GetBufferParameteri64v.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetBufferParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetBufferParameteriv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetBufferPointerv(&self, target: types::GLenum, pname: types::GLenum, params: *const *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const *mut __gl_imports::raw::c_void) -> ()>(self.GetBufferPointerv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetError(&self, ) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn() -> types::GLenum>(self.GetError.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetFloatv(&self, pname: types::GLenum, data: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLfloat) -> ()>(self.GetFloatv.f)(pname, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetFragDataLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetFragDataLocation.f)(program, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetFramebufferAttachmentParameteriv(&self, target: types::GLenum, attachment: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetFramebufferAttachmentParameteriv.f)(target, attachment, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetInteger64i_v(&self, target: types::GLenum, index: types::GLuint, data: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, *mut types::GLint64) -> ()>(self.GetInteger64i_v.f)(target, index, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetInteger64v(&self, pname: types::GLenum, data: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLint64) -> ()>(self.GetInteger64v.f)(pname, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetIntegeri_v(&self, target: types::GLenum, index: types::GLuint, data: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, *mut types::GLint) -> ()>(self.GetIntegeri_v.f)(target, index, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetIntegerv(&self, pname: types::GLenum, data: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLint) -> ()>(self.GetIntegerv.f)(pname, data) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetInternalformativ(&self, target: types::GLenum, internalformat: types::GLenum, pname: types::GLenum, bufSize: types::GLsizei, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLsizei, *mut types::GLint) -> ()>(self.GetInternalformativ.f)(target, internalformat, pname, bufSize, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetProgramBinary(&self, program: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, binaryFormat: *mut types::GLenum, binary: *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLenum, *mut __gl_imports::raw::c_void) -> ()>(self.GetProgramBinary.f)(program, bufSize, length, binaryFormat, binary) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetProgramInfoLog(&self, program: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, infoLog: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetProgramInfoLog.f)(program, bufSize, length, infoLog) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetProgramiv(&self, program: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetProgramiv.f)(program, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetQueryObjectuiv(&self, id: types::GLuint, pname: types::GLenum, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLuint) -> ()>(self.GetQueryObjectuiv.f)(id, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetQueryiv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetQueryiv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetRenderbufferParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetRenderbufferParameteriv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetSamplerParameterfv(&self, sampler: types::GLuint, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLfloat) -> ()>(self.GetSamplerParameterfv.f)(sampler, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetSamplerParameteriv(&self, sampler: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetSamplerParameteriv.f)(sampler, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetShaderInfoLog(&self, shader: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, infoLog: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetShaderInfoLog.f)(shader, bufSize, length, infoLog) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetShaderPrecisionFormat(&self, shadertype: types::GLenum, precisiontype: types::GLenum, range: *mut types::GLint, precision: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint, *mut types::GLint) -> ()>(self.GetShaderPrecisionFormat.f)(shadertype, precisiontype, range, precision) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetShaderSource(&self, shader: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, source: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetShaderSource.f)(shader, bufSize, length, source) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetShaderiv(&self, shader: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetShaderiv.f)(shader, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetString(&self, name: types::GLenum) -> *const types::GLubyte { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> *const types::GLubyte>(self.GetString.f)(name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetStringi(&self, name: types::GLenum, index: types::GLuint) -> *const types::GLubyte { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> *const types::GLubyte>(self.GetStringi.f)(name, index) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetSynciv(&self, sync: types::GLsync, pname: types::GLenum, bufSize: types::GLsizei, length: *mut types::GLsizei, values: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLenum, types::GLsizei, *mut types::GLsizei, *mut types::GLint) -> ()>(self.GetSynciv.f)(sync, pname, bufSize, length, values) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetTexParameterfv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLfloat) -> ()>(self.GetTexParameterfv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetTexParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetTexParameteriv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetTransformFeedbackVarying(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLsizei, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLsizei, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetTransformFeedbackVarying.f)(program, index, bufSize, length, size, type_, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformBlockIndex(&self, program: types::GLuint, uniformBlockName: *const types::GLchar) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLuint>(self.GetUniformBlockIndex.f)(program, uniformBlockName) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformIndices(&self, program: types::GLuint, uniformCount: types::GLsizei, uniformNames: *const *const types::GLchar, uniformIndices: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, *mut types::GLuint) -> ()>(self.GetUniformIndices.f)(program, uniformCount, uniformNames, uniformIndices) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetUniformLocation.f)(program, name) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformfv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLfloat) -> ()>(self.GetUniformfv.f)(program, location, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformiv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLint) -> ()>(self.GetUniformiv.f)(program, location, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetUniformuiv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLuint) -> ()>(self.GetUniformuiv.f)(program, location, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetVertexAttribIiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetVertexAttribIiv.f)(index, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetVertexAttribIuiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLuint) -> ()>(self.GetVertexAttribIuiv.f)(index, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetVertexAttribPointerv(&self, index: types::GLuint, pname: types::GLenum, pointer: *const *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const *mut __gl_imports::raw::c_void) -> ()>(self.GetVertexAttribPointerv.f)(index, pname, pointer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetVertexAttribfv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLfloat) -> ()>(self.GetVertexAttribfv.f)(index, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn GetVertexAttribiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetVertexAttribiv.f)(index, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Hint(&self, target: types::GLenum, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.Hint.f)(target, mode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn InvalidateFramebuffer(&self, target: types::GLenum, numAttachments: types::GLsizei, attachments: *const types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, *const types::GLenum) -> ()>(self.InvalidateFramebuffer.f)(target, numAttachments, attachments) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn InvalidateSubFramebuffer(&self, target: types::GLenum, numAttachments: types::GLsizei, attachments: *const types::GLenum, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, *const types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.InvalidateSubFramebuffer.f)(target, numAttachments, attachments, x, y, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsBuffer(&self, buffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsBuffer.f)(buffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsEnabled(&self, cap: types::GLenum) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLboolean>(self.IsEnabled.f)(cap) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsFramebuffer(&self, framebuffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsFramebuffer.f)(framebuffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsProgram(&self, program: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsProgram.f)(program) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsQuery(&self, id: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsQuery.f)(id) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsRenderbuffer(&self, renderbuffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsRenderbuffer.f)(renderbuffer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsSampler(&self, sampler: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsSampler.f)(sampler) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsShader(&self, shader: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsShader.f)(shader) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsSync(&self, sync: types::GLsync) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync) -> types::GLboolean>(self.IsSync.f)(sync) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsTexture(&self, texture: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsTexture.f)(texture) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsTransformFeedback(&self, id: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsTransformFeedback.f)(id) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn IsVertexArray(&self, array: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsVertexArray.f)(array) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn LineWidth(&self, width: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat) -> ()>(self.LineWidth.f)(width) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn LinkProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.LinkProgram.f)(program) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn MapBufferRange(&self, target: types::GLenum, offset: types::GLintptr, length: types::GLsizeiptr, access: types::GLbitfield) -> *mut __gl_imports::raw::c_void { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr, types::GLbitfield) -> *mut __gl_imports::raw::c_void>(self.MapBufferRange.f)(target, offset, length, access) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn PauseTransformFeedback(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.PauseTransformFeedback.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn PixelStorei(&self, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint) -> ()>(self.PixelStorei.f)(pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn PolygonOffset(&self, factor: types::GLfloat, units: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat) -> ()>(self.PolygonOffset.f)(factor, units) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ProgramBinary(&self, program: types::GLuint, binaryFormat: types::GLenum, binary: *const __gl_imports::raw::c_void, length: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.ProgramBinary.f)(program, binaryFormat, binary, length) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ProgramParameteri(&self, program: types::GLuint, pname: types::GLenum, value: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLint) -> ()>(self.ProgramParameteri.f)(program, pname, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ReadBuffer(&self, src: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.ReadBuffer.f)(src) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ReadPixels(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *mut __gl_imports::raw::c_void) -> ()>(self.ReadPixels.f)(x, y, width, height, format, type_, pixels) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ReleaseShaderCompiler(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.ReleaseShaderCompiler.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn RenderbufferStorage(&self, target: types::GLenum, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.RenderbufferStorage.f)(target, internalformat, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn RenderbufferStorageMultisample(&self, target: types::GLenum, samples: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.RenderbufferStorageMultisample.f)(target, samples, internalformat, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ResumeTransformFeedback(&self, ) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.ResumeTransformFeedback.f)() } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn SampleCoverage(&self, value: types::GLfloat, invert: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLboolean) -> ()>(self.SampleCoverage.f)(value, invert) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn SamplerParameterf(&self, sampler: types::GLuint, pname: types::GLenum, param: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLfloat) -> ()>(self.SamplerParameterf.f)(sampler, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn SamplerParameterfv(&self, sampler: types::GLuint, pname: types::GLenum, param: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const types::GLfloat) -> ()>(self.SamplerParameterfv.f)(sampler, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn SamplerParameteri(&self, sampler: types::GLuint, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLint) -> ()>(self.SamplerParameteri.f)(sampler, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn SamplerParameteriv(&self, sampler: types::GLuint, pname: types::GLenum, param: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const types::GLint) -> ()>(self.SamplerParameteriv.f)(sampler, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Scissor(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.Scissor.f)(x, y, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ShaderBinary(&self, count: types::GLsizei, shaders: *const types::GLuint, binaryformat: types::GLenum, binary: *const __gl_imports::raw::c_void, length: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.ShaderBinary.f)(count, shaders, binaryformat, binary, length) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ShaderSource(&self, shader: types::GLuint, count: types::GLsizei, string: *const *const types::GLchar, length: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, *const types::GLint) -> ()>(self.ShaderSource.f)(shader, count, string, length) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilFunc(&self, func: types::GLenum, ref_: types::GLint, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLuint) -> ()>(self.StencilFunc.f)(func, ref_, mask) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilFuncSeparate(&self, face: types::GLenum, func: types::GLenum, ref_: types::GLint, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLint, types::GLuint) -> ()>(self.StencilFuncSeparate.f)(face, func, ref_, mask) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilMask(&self, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.StencilMask.f)(mask) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilMaskSeparate(&self, face: types::GLenum, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.StencilMaskSeparate.f)(face, mask) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilOp(&self, fail: types::GLenum, zfail: types::GLenum, zpass: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum) -> ()>(self.StencilOp.f)(fail, zfail, zpass) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn StencilOpSeparate(&self, face: types::GLenum, sfail: types::GLenum, dpfail: types::GLenum, dppass: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLenum) -> ()>(self.StencilOpSeparate.f)(face, sfail, dpfail, dppass) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLint, width: types::GLsizei, height: types::GLsizei, border: types::GLint, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLint, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexImage2D.f)(target, level, internalformat, width, height, border, format, type_, pixels) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexImage3D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, border: types::GLint, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLint, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexImage3D.f)(target, level, internalformat, width, height, depth, border, format, type_, pixels) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexParameterf(&self, target: types::GLenum, pname: types::GLenum, param: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLfloat) -> ()>(self.TexParameterf.f)(target, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexParameterfv(&self, target: types::GLenum, pname: types::GLenum, params: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const types::GLfloat) -> ()>(self.TexParameterfv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexParameteri(&self, target: types::GLenum, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLint) -> ()>(self.TexParameteri.f)(target, pname, param) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const types::GLint) -> ()>(self.TexParameteriv.f)(target, pname, params) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexStorage2D(&self, target: types::GLenum, levels: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.TexStorage2D.f)(target, levels, internalformat, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexStorage3D(&self, target: types::GLenum, levels: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei, types::GLsizei) -> ()>(self.TexStorage3D.f)(target, levels, internalformat, width, height, depth) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexSubImage2D.f)(target, level, xoffset, yoffset, width, height, format, type_, pixels) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn TransformFeedbackVaryings(&self, program: types::GLuint, count: types::GLsizei, varyings: *const *const types::GLchar, bufferMode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, types::GLenum) -> ()>(self.TransformFeedbackVaryings.f)(program, count, varyings, bufferMode) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1f(&self, location: types::GLint, v0: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat) -> ()>(self.Uniform1f.f)(location, v0) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform1fv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1i(&self, location: types::GLint, v0: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint) -> ()>(self.Uniform1i.f)(location, v0) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform1iv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1ui(&self, location: types::GLint, v0: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint) -> ()>(self.Uniform1ui.f)(location, v0) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform1uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform1uiv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat) -> ()>(self.Uniform2f.f)(location, v0, v1) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform2fv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform2i.f)(location, v0, v1) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform2iv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint) -> ()>(self.Uniform2ui.f)(location, v0, v1) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform2uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform2uiv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat, v2: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.Uniform3f.f)(location, v0, v1, v2) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform3fv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint, v2: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform3i.f)(location, v0, v1, v2) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform3iv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint, v2: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.Uniform3ui.f)(location, v0, v1, v2) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform3uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform3uiv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat, v2: types::GLfloat, v3: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.Uniform4f.f)(location, v0, v1, v2, v3) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform4fv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint, v2: types::GLint, v3: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform4i.f)(location, v0, v1, v2, v3) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform4iv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint, v2: types::GLuint, v3: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.Uniform4ui.f)(location, v0, v1, v2, v3) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Uniform4uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform4uiv.f)(location, count, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformBlockBinding(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, uniformBlockBinding: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLuint) -> ()>(self.UniformBlockBinding.f)(program, uniformBlockIndex, uniformBlockBinding) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix2x3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2x3fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix2x4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2x4fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix3x2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3x2fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix3x4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3x4fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix4x2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4x2fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UniformMatrix4x3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4x3fv.f)(location, count, transpose, value) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UnmapBuffer(&self, target: types::GLenum) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLboolean>(self.UnmapBuffer.f)(target) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn UseProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.UseProgram.f)(program) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn ValidateProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.ValidateProgram.f)(program) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib1f(&self, index: types::GLuint, x: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat) -> ()>(self.VertexAttrib1f.f)(index, x) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib1fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib1fv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib2f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib2f.f)(index, x, y) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib2fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib2fv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib3f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat, z: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib3f.f)(index, x, y, z) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib3fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib3fv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib4f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat, z: types::GLfloat, w: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib4f.f)(index, x, y, z, w) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttrib4fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib4fv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribDivisor(&self, index: types::GLuint, divisor: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.VertexAttribDivisor.f)(index, divisor) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribI4i(&self, index: types::GLuint, x: types::GLint, y: types::GLint, z: types::GLint, w: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.VertexAttribI4i.f)(index, x, y, z, w) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribI4iv(&self, index: types::GLuint, v: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLint) -> ()>(self.VertexAttribI4iv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribI4ui(&self, index: types::GLuint, x: types::GLuint, y: types::GLuint, z: types::GLuint, w: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.VertexAttribI4ui.f)(index, x, y, z, w) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribI4uiv(&self, index: types::GLuint, v: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLuint) -> ()>(self.VertexAttribI4uiv.f)(index, v) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribIPointer(&self, index: types::GLuint, size: types::GLint, type_: types::GLenum, stride: types::GLsizei, pointer: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.VertexAttribIPointer.f)(index, size, type_, stride, pointer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn VertexAttribPointer(&self, index: types::GLuint, size: types::GLint, type_: types::GLenum, normalized: types::GLboolean, stride: types::GLsizei, pointer: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLenum, types::GLboolean, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.VertexAttribPointer.f)(index, size, type_, normalized, stride, pointer) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn Viewport(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.Viewport.f)(x, y, width, height) } -#[allow(non_snake_case, unused_variables, dead_code)] - #[inline] pub unsafe fn WaitSync(&self, sync: types::GLsync, flags: types::GLbitfield, timeout: types::GLuint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLbitfield, types::GLuint64) -> ()>(self.WaitSync.f)(sync, flags, timeout) } + let mut metaloadfn = |symbol: &'static str, symbols: &[&'static str]| { + do_metaloadfn(&mut loadfn, symbol, symbols) + }; + Gles2 { + ActiveTexture: FnPtr::new(metaloadfn("glActiveTexture", &["glActiveTextureARB"])), + AttachShader: FnPtr::new(metaloadfn("glAttachShader", &["glAttachObjectARB"])), + BeginQuery: FnPtr::new(metaloadfn("glBeginQuery", &["glBeginQueryARB"])), + BeginTransformFeedback: FnPtr::new(metaloadfn("glBeginTransformFeedback", &["glBeginTransformFeedbackEXT", "glBeginTransformFeedbackNV"])), + BindAttribLocation: FnPtr::new(metaloadfn("glBindAttribLocation", &["glBindAttribLocationARB"])), + BindBuffer: FnPtr::new(metaloadfn("glBindBuffer", &["glBindBufferARB"])), + BindBufferBase: FnPtr::new(metaloadfn("glBindBufferBase", &["glBindBufferBaseEXT", "glBindBufferBaseNV"])), + BindBufferRange: FnPtr::new(metaloadfn("glBindBufferRange", &["glBindBufferRangeEXT", "glBindBufferRangeNV"])), + BindFramebuffer: FnPtr::new(metaloadfn("glBindFramebuffer", &[])), + BindRenderbuffer: FnPtr::new(metaloadfn("glBindRenderbuffer", &[])), + BindSampler: FnPtr::new(metaloadfn("glBindSampler", &[])), + BindTexture: FnPtr::new(metaloadfn("glBindTexture", &["glBindTextureEXT"])), + BindTransformFeedback: FnPtr::new(metaloadfn("glBindTransformFeedback", &[])), + BindVertexArray: FnPtr::new(metaloadfn("glBindVertexArray", &["glBindVertexArrayOES"])), + BlendColor: FnPtr::new(metaloadfn("glBlendColor", &["glBlendColorEXT"])), + BlendEquation: FnPtr::new(metaloadfn("glBlendEquation", &["glBlendEquationEXT"])), + BlendEquationSeparate: FnPtr::new(metaloadfn("glBlendEquationSeparate", &["glBlendEquationSeparateEXT"])), + BlendFunc: FnPtr::new(metaloadfn("glBlendFunc", &[])), + BlendFuncSeparate: FnPtr::new(metaloadfn("glBlendFuncSeparate", &["glBlendFuncSeparateEXT", "glBlendFuncSeparateINGR"])), + BlitFramebuffer: FnPtr::new(metaloadfn("glBlitFramebuffer", &["glBlitFramebufferEXT", "glBlitFramebufferNV"])), + BufferData: FnPtr::new(metaloadfn("glBufferData", &["glBufferDataARB"])), + BufferSubData: FnPtr::new(metaloadfn("glBufferSubData", &["glBufferSubDataARB"])), + CheckFramebufferStatus: FnPtr::new(metaloadfn("glCheckFramebufferStatus", &["glCheckFramebufferStatusEXT"])), + Clear: FnPtr::new(metaloadfn("glClear", &[])), + ClearBufferfi: FnPtr::new(metaloadfn("glClearBufferfi", &[])), + ClearBufferfv: FnPtr::new(metaloadfn("glClearBufferfv", &[])), + ClearBufferiv: FnPtr::new(metaloadfn("glClearBufferiv", &[])), + ClearBufferuiv: FnPtr::new(metaloadfn("glClearBufferuiv", &[])), + ClearColor: FnPtr::new(metaloadfn("glClearColor", &[])), + ClearDepthf: FnPtr::new(metaloadfn("glClearDepthf", &["glClearDepthfOES"])), + ClearStencil: FnPtr::new(metaloadfn("glClearStencil", &[])), + ClientWaitSync: FnPtr::new(metaloadfn("glClientWaitSync", &["glClientWaitSyncAPPLE"])), + ColorMask: FnPtr::new(metaloadfn("glColorMask", &[])), + CompileShader: FnPtr::new(metaloadfn("glCompileShader", &["glCompileShaderARB"])), + CompressedTexImage2D: FnPtr::new(metaloadfn("glCompressedTexImage2D", &["glCompressedTexImage2DARB"])), + CompressedTexImage3D: FnPtr::new(metaloadfn("glCompressedTexImage3D", &["glCompressedTexImage3DARB"])), + CompressedTexSubImage2D: FnPtr::new(metaloadfn("glCompressedTexSubImage2D", &["glCompressedTexSubImage2DARB"])), + CompressedTexSubImage3D: FnPtr::new(metaloadfn("glCompressedTexSubImage3D", &["glCompressedTexSubImage3DARB"])), + CopyBufferSubData: FnPtr::new(metaloadfn("glCopyBufferSubData", &["glCopyBufferSubDataNV"])), + CopyTexImage2D: FnPtr::new(metaloadfn("glCopyTexImage2D", &["glCopyTexImage2DEXT"])), + CopyTexSubImage2D: FnPtr::new(metaloadfn("glCopyTexSubImage2D", &["glCopyTexSubImage2DEXT"])), + CopyTexSubImage3D: FnPtr::new(metaloadfn("glCopyTexSubImage3D", &["glCopyTexSubImage3DEXT"])), + CreateProgram: FnPtr::new(metaloadfn("glCreateProgram", &["glCreateProgramObjectARB"])), + CreateShader: FnPtr::new(metaloadfn("glCreateShader", &["glCreateShaderObjectARB"])), + CullFace: FnPtr::new(metaloadfn("glCullFace", &[])), + DeleteBuffers: FnPtr::new(metaloadfn("glDeleteBuffers", &["glDeleteBuffersARB"])), + DeleteFramebuffers: FnPtr::new(metaloadfn("glDeleteFramebuffers", &["glDeleteFramebuffersEXT"])), + DeleteProgram: FnPtr::new(metaloadfn("glDeleteProgram", &[])), + DeleteQueries: FnPtr::new(metaloadfn("glDeleteQueries", &["glDeleteQueriesARB"])), + DeleteRenderbuffers: FnPtr::new(metaloadfn("glDeleteRenderbuffers", &["glDeleteRenderbuffersEXT"])), + DeleteSamplers: FnPtr::new(metaloadfn("glDeleteSamplers", &[])), + DeleteShader: FnPtr::new(metaloadfn("glDeleteShader", &[])), + DeleteSync: FnPtr::new(metaloadfn("glDeleteSync", &["glDeleteSyncAPPLE"])), + DeleteTextures: FnPtr::new(metaloadfn("glDeleteTextures", &[])), + DeleteTransformFeedbacks: FnPtr::new(metaloadfn("glDeleteTransformFeedbacks", &["glDeleteTransformFeedbacksNV"])), + DeleteVertexArrays: FnPtr::new(metaloadfn("glDeleteVertexArrays", &["glDeleteVertexArraysAPPLE", "glDeleteVertexArraysOES"])), + DepthFunc: FnPtr::new(metaloadfn("glDepthFunc", &[])), + DepthMask: FnPtr::new(metaloadfn("glDepthMask", &[])), + DepthRangef: FnPtr::new(metaloadfn("glDepthRangef", &["glDepthRangefOES"])), + DetachShader: FnPtr::new(metaloadfn("glDetachShader", &["glDetachObjectARB"])), + Disable: FnPtr::new(metaloadfn("glDisable", &[])), + DisableVertexAttribArray: FnPtr::new(metaloadfn("glDisableVertexAttribArray", &["glDisableVertexAttribArrayARB"])), + DrawArrays: FnPtr::new(metaloadfn("glDrawArrays", &["glDrawArraysEXT"])), + DrawArraysInstanced: FnPtr::new(metaloadfn("glDrawArraysInstanced", &["glDrawArraysInstancedANGLE", "glDrawArraysInstancedARB", "glDrawArraysInstancedEXT", "glDrawArraysInstancedNV"])), + DrawBuffers: FnPtr::new(metaloadfn("glDrawBuffers", &["glDrawBuffersARB", "glDrawBuffersATI", "glDrawBuffersEXT"])), + DrawElements: FnPtr::new(metaloadfn("glDrawElements", &[])), + DrawElementsInstanced: FnPtr::new(metaloadfn("glDrawElementsInstanced", &["glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB", "glDrawElementsInstancedEXT", "glDrawElementsInstancedNV"])), + DrawRangeElements: FnPtr::new(metaloadfn("glDrawRangeElements", &["glDrawRangeElementsEXT"])), + Enable: FnPtr::new(metaloadfn("glEnable", &[])), + EnableVertexAttribArray: FnPtr::new(metaloadfn("glEnableVertexAttribArray", &["glEnableVertexAttribArrayARB"])), + EndQuery: FnPtr::new(metaloadfn("glEndQuery", &["glEndQueryARB"])), + EndTransformFeedback: FnPtr::new(metaloadfn("glEndTransformFeedback", &["glEndTransformFeedbackEXT", "glEndTransformFeedbackNV"])), + FenceSync: FnPtr::new(metaloadfn("glFenceSync", &["glFenceSyncAPPLE"])), + Finish: FnPtr::new(metaloadfn("glFinish", &[])), + Flush: FnPtr::new(metaloadfn("glFlush", &[])), + FlushMappedBufferRange: FnPtr::new(metaloadfn("glFlushMappedBufferRange", &["glFlushMappedBufferRangeAPPLE", "glFlushMappedBufferRangeEXT"])), + FramebufferRenderbuffer: FnPtr::new(metaloadfn("glFramebufferRenderbuffer", &["glFramebufferRenderbufferEXT"])), + FramebufferTexture2D: FnPtr::new(metaloadfn("glFramebufferTexture2D", &["glFramebufferTexture2DEXT"])), + FramebufferTextureLayer: FnPtr::new(metaloadfn("glFramebufferTextureLayer", &["glFramebufferTextureLayerARB", "glFramebufferTextureLayerEXT"])), + FrontFace: FnPtr::new(metaloadfn("glFrontFace", &[])), + GenBuffers: FnPtr::new(metaloadfn("glGenBuffers", &["glGenBuffersARB"])), + GenFramebuffers: FnPtr::new(metaloadfn("glGenFramebuffers", &["glGenFramebuffersEXT"])), + GenQueries: FnPtr::new(metaloadfn("glGenQueries", &["glGenQueriesARB"])), + GenRenderbuffers: FnPtr::new(metaloadfn("glGenRenderbuffers", &["glGenRenderbuffersEXT"])), + GenSamplers: FnPtr::new(metaloadfn("glGenSamplers", &[])), + GenTextures: FnPtr::new(metaloadfn("glGenTextures", &[])), + GenTransformFeedbacks: FnPtr::new(metaloadfn("glGenTransformFeedbacks", &["glGenTransformFeedbacksNV"])), + GenVertexArrays: FnPtr::new(metaloadfn("glGenVertexArrays", &["glGenVertexArraysAPPLE", "glGenVertexArraysOES"])), + GenerateMipmap: FnPtr::new(metaloadfn("glGenerateMipmap", &["glGenerateMipmapEXT"])), + GetActiveAttrib: FnPtr::new(metaloadfn("glGetActiveAttrib", &["glGetActiveAttribARB"])), + GetActiveUniform: FnPtr::new(metaloadfn("glGetActiveUniform", &["glGetActiveUniformARB"])), + GetActiveUniformBlockName: FnPtr::new(metaloadfn("glGetActiveUniformBlockName", &[])), + GetActiveUniformBlockiv: FnPtr::new(metaloadfn("glGetActiveUniformBlockiv", &[])), + GetActiveUniformsiv: FnPtr::new(metaloadfn("glGetActiveUniformsiv", &[])), + GetAttachedShaders: FnPtr::new(metaloadfn("glGetAttachedShaders", &[])), + GetAttribLocation: FnPtr::new(metaloadfn("glGetAttribLocation", &["glGetAttribLocationARB"])), + GetBooleanv: FnPtr::new(metaloadfn("glGetBooleanv", &[])), + GetBufferParameteri64v: FnPtr::new(metaloadfn("glGetBufferParameteri64v", &[])), + GetBufferParameteriv: FnPtr::new(metaloadfn("glGetBufferParameteriv", &["glGetBufferParameterivARB"])), + GetBufferPointerv: FnPtr::new(metaloadfn("glGetBufferPointerv", &["glGetBufferPointervARB", "glGetBufferPointervOES"])), + GetError: FnPtr::new(metaloadfn("glGetError", &[])), + GetFloatv: FnPtr::new(metaloadfn("glGetFloatv", &[])), + GetFragDataLocation: FnPtr::new(metaloadfn("glGetFragDataLocation", &["glGetFragDataLocationEXT"])), + GetFramebufferAttachmentParameteriv: FnPtr::new(metaloadfn("glGetFramebufferAttachmentParameteriv", &["glGetFramebufferAttachmentParameterivEXT"])), + GetInteger64i_v: FnPtr::new(metaloadfn("glGetInteger64i_v", &[])), + GetInteger64v: FnPtr::new(metaloadfn("glGetInteger64v", &["glGetInteger64vAPPLE"])), + GetIntegeri_v: FnPtr::new(metaloadfn("glGetIntegeri_v", &["glGetIntegerIndexedvEXT"])), + GetIntegerv: FnPtr::new(metaloadfn("glGetIntegerv", &[])), + GetInternalformativ: FnPtr::new(metaloadfn("glGetInternalformativ", &[])), + GetProgramBinary: FnPtr::new(metaloadfn("glGetProgramBinary", &["glGetProgramBinaryOES"])), + GetProgramInfoLog: FnPtr::new(metaloadfn("glGetProgramInfoLog", &[])), + GetProgramiv: FnPtr::new(metaloadfn("glGetProgramiv", &[])), + GetQueryObjectuiv: FnPtr::new(metaloadfn("glGetQueryObjectuiv", &["glGetQueryObjectuivARB"])), + GetQueryiv: FnPtr::new(metaloadfn("glGetQueryiv", &["glGetQueryivARB"])), + GetRenderbufferParameteriv: FnPtr::new(metaloadfn("glGetRenderbufferParameteriv", &["glGetRenderbufferParameterivEXT"])), + GetSamplerParameterfv: FnPtr::new(metaloadfn("glGetSamplerParameterfv", &[])), + GetSamplerParameteriv: FnPtr::new(metaloadfn("glGetSamplerParameteriv", &[])), + GetShaderInfoLog: FnPtr::new(metaloadfn("glGetShaderInfoLog", &[])), + GetShaderPrecisionFormat: FnPtr::new(metaloadfn("glGetShaderPrecisionFormat", &[])), + GetShaderSource: FnPtr::new(metaloadfn("glGetShaderSource", &["glGetShaderSourceARB"])), + GetShaderiv: FnPtr::new(metaloadfn("glGetShaderiv", &[])), + GetString: FnPtr::new(metaloadfn("glGetString", &[])), + GetStringi: FnPtr::new(metaloadfn("glGetStringi", &[])), + GetSynciv: FnPtr::new(metaloadfn("glGetSynciv", &["glGetSyncivAPPLE"])), + GetTexParameterfv: FnPtr::new(metaloadfn("glGetTexParameterfv", &[])), + GetTexParameteriv: FnPtr::new(metaloadfn("glGetTexParameteriv", &[])), + GetTransformFeedbackVarying: FnPtr::new(metaloadfn("glGetTransformFeedbackVarying", &["glGetTransformFeedbackVaryingEXT"])), + GetUniformBlockIndex: FnPtr::new(metaloadfn("glGetUniformBlockIndex", &[])), + GetUniformIndices: FnPtr::new(metaloadfn("glGetUniformIndices", &[])), + GetUniformLocation: FnPtr::new(metaloadfn("glGetUniformLocation", &["glGetUniformLocationARB"])), + GetUniformfv: FnPtr::new(metaloadfn("glGetUniformfv", &["glGetUniformfvARB"])), + GetUniformiv: FnPtr::new(metaloadfn("glGetUniformiv", &["glGetUniformivARB"])), + GetUniformuiv: FnPtr::new(metaloadfn("glGetUniformuiv", &["glGetUniformuivEXT"])), + GetVertexAttribIiv: FnPtr::new(metaloadfn("glGetVertexAttribIiv", &["glGetVertexAttribIivEXT"])), + GetVertexAttribIuiv: FnPtr::new(metaloadfn("glGetVertexAttribIuiv", &["glGetVertexAttribIuivEXT"])), + GetVertexAttribPointerv: FnPtr::new(metaloadfn("glGetVertexAttribPointerv", &["glGetVertexAttribPointervARB", "glGetVertexAttribPointervNV"])), + GetVertexAttribfv: FnPtr::new(metaloadfn("glGetVertexAttribfv", &["glGetVertexAttribfvARB", "glGetVertexAttribfvNV"])), + GetVertexAttribiv: FnPtr::new(metaloadfn("glGetVertexAttribiv", &["glGetVertexAttribivARB", "glGetVertexAttribivNV"])), + Hint: FnPtr::new(metaloadfn("glHint", &[])), + InvalidateFramebuffer: FnPtr::new(metaloadfn("glInvalidateFramebuffer", &[])), + InvalidateSubFramebuffer: FnPtr::new(metaloadfn("glInvalidateSubFramebuffer", &[])), + IsBuffer: FnPtr::new(metaloadfn("glIsBuffer", &["glIsBufferARB"])), + IsEnabled: FnPtr::new(metaloadfn("glIsEnabled", &[])), + IsFramebuffer: FnPtr::new(metaloadfn("glIsFramebuffer", &["glIsFramebufferEXT"])), + IsProgram: FnPtr::new(metaloadfn("glIsProgram", &[])), + IsQuery: FnPtr::new(metaloadfn("glIsQuery", &["glIsQueryARB"])), + IsRenderbuffer: FnPtr::new(metaloadfn("glIsRenderbuffer", &["glIsRenderbufferEXT"])), + IsSampler: FnPtr::new(metaloadfn("glIsSampler", &[])), + IsShader: FnPtr::new(metaloadfn("glIsShader", &[])), + IsSync: FnPtr::new(metaloadfn("glIsSync", &["glIsSyncAPPLE"])), + IsTexture: FnPtr::new(metaloadfn("glIsTexture", &[])), + IsTransformFeedback: FnPtr::new(metaloadfn("glIsTransformFeedback", &["glIsTransformFeedbackNV"])), + IsVertexArray: FnPtr::new(metaloadfn("glIsVertexArray", &["glIsVertexArrayAPPLE", "glIsVertexArrayOES"])), + LineWidth: FnPtr::new(metaloadfn("glLineWidth", &[])), + LinkProgram: FnPtr::new(metaloadfn("glLinkProgram", &["glLinkProgramARB"])), + MapBufferRange: FnPtr::new(metaloadfn("glMapBufferRange", &["glMapBufferRangeEXT"])), + PauseTransformFeedback: FnPtr::new(metaloadfn("glPauseTransformFeedback", &["glPauseTransformFeedbackNV"])), + PixelStorei: FnPtr::new(metaloadfn("glPixelStorei", &[])), + PolygonOffset: FnPtr::new(metaloadfn("glPolygonOffset", &[])), + ProgramBinary: FnPtr::new(metaloadfn("glProgramBinary", &["glProgramBinaryOES"])), + ProgramParameteri: FnPtr::new(metaloadfn("glProgramParameteri", &["glProgramParameteriARB", "glProgramParameteriEXT"])), + ReadBuffer: FnPtr::new(metaloadfn("glReadBuffer", &[])), + ReadPixels: FnPtr::new(metaloadfn("glReadPixels", &[])), + ReleaseShaderCompiler: FnPtr::new(metaloadfn("glReleaseShaderCompiler", &[])), + RenderbufferStorage: FnPtr::new(metaloadfn("glRenderbufferStorage", &["glRenderbufferStorageEXT"])), + RenderbufferStorageMultisample: FnPtr::new(metaloadfn("glRenderbufferStorageMultisample", &["glRenderbufferStorageMultisampleEXT", "glRenderbufferStorageMultisampleNV"])), + ResumeTransformFeedback: FnPtr::new(metaloadfn("glResumeTransformFeedback", &["glResumeTransformFeedbackNV"])), + SampleCoverage: FnPtr::new(metaloadfn("glSampleCoverage", &["glSampleCoverageARB"])), + SamplerParameterf: FnPtr::new(metaloadfn("glSamplerParameterf", &[])), + SamplerParameterfv: FnPtr::new(metaloadfn("glSamplerParameterfv", &[])), + SamplerParameteri: FnPtr::new(metaloadfn("glSamplerParameteri", &[])), + SamplerParameteriv: FnPtr::new(metaloadfn("glSamplerParameteriv", &[])), + Scissor: FnPtr::new(metaloadfn("glScissor", &[])), + ShaderBinary: FnPtr::new(metaloadfn("glShaderBinary", &[])), + ShaderSource: FnPtr::new(metaloadfn("glShaderSource", &["glShaderSourceARB"])), + StencilFunc: FnPtr::new(metaloadfn("glStencilFunc", &[])), + StencilFuncSeparate: FnPtr::new(metaloadfn("glStencilFuncSeparate", &[])), + StencilMask: FnPtr::new(metaloadfn("glStencilMask", &[])), + StencilMaskSeparate: FnPtr::new(metaloadfn("glStencilMaskSeparate", &[])), + StencilOp: FnPtr::new(metaloadfn("glStencilOp", &[])), + StencilOpSeparate: FnPtr::new(metaloadfn("glStencilOpSeparate", &["glStencilOpSeparateATI"])), + TexImage2D: FnPtr::new(metaloadfn("glTexImage2D", &[])), + TexImage3D: FnPtr::new(metaloadfn("glTexImage3D", &["glTexImage3DEXT"])), + TexParameterf: FnPtr::new(metaloadfn("glTexParameterf", &[])), + TexParameterfv: FnPtr::new(metaloadfn("glTexParameterfv", &[])), + TexParameteri: FnPtr::new(metaloadfn("glTexParameteri", &[])), + TexParameteriv: FnPtr::new(metaloadfn("glTexParameteriv", &[])), + TexStorage2D: FnPtr::new(metaloadfn("glTexStorage2D", &["glTexStorage2DEXT"])), + TexStorage3D: FnPtr::new(metaloadfn("glTexStorage3D", &["glTexStorage3DEXT"])), + TexSubImage2D: FnPtr::new(metaloadfn("glTexSubImage2D", &["glTexSubImage2DEXT"])), + TexSubImage3D: FnPtr::new(metaloadfn("glTexSubImage3D", &["glTexSubImage3DEXT"])), + TransformFeedbackVaryings: FnPtr::new(metaloadfn("glTransformFeedbackVaryings", &["glTransformFeedbackVaryingsEXT"])), + Uniform1f: FnPtr::new(metaloadfn("glUniform1f", &["glUniform1fARB"])), + Uniform1fv: FnPtr::new(metaloadfn("glUniform1fv", &["glUniform1fvARB"])), + Uniform1i: FnPtr::new(metaloadfn("glUniform1i", &["glUniform1iARB"])), + Uniform1iv: FnPtr::new(metaloadfn("glUniform1iv", &["glUniform1ivARB"])), + Uniform1ui: FnPtr::new(metaloadfn("glUniform1ui", &["glUniform1uiEXT"])), + Uniform1uiv: FnPtr::new(metaloadfn("glUniform1uiv", &["glUniform1uivEXT"])), + Uniform2f: FnPtr::new(metaloadfn("glUniform2f", &["glUniform2fARB"])), + Uniform2fv: FnPtr::new(metaloadfn("glUniform2fv", &["glUniform2fvARB"])), + Uniform2i: FnPtr::new(metaloadfn("glUniform2i", &["glUniform2iARB"])), + Uniform2iv: FnPtr::new(metaloadfn("glUniform2iv", &["glUniform2ivARB"])), + Uniform2ui: FnPtr::new(metaloadfn("glUniform2ui", &["glUniform2uiEXT"])), + Uniform2uiv: FnPtr::new(metaloadfn("glUniform2uiv", &["glUniform2uivEXT"])), + Uniform3f: FnPtr::new(metaloadfn("glUniform3f", &["glUniform3fARB"])), + Uniform3fv: FnPtr::new(metaloadfn("glUniform3fv", &["glUniform3fvARB"])), + Uniform3i: FnPtr::new(metaloadfn("glUniform3i", &["glUniform3iARB"])), + Uniform3iv: FnPtr::new(metaloadfn("glUniform3iv", &["glUniform3ivARB"])), + Uniform3ui: FnPtr::new(metaloadfn("glUniform3ui", &["glUniform3uiEXT"])), + Uniform3uiv: FnPtr::new(metaloadfn("glUniform3uiv", &["glUniform3uivEXT"])), + Uniform4f: FnPtr::new(metaloadfn("glUniform4f", &["glUniform4fARB"])), + Uniform4fv: FnPtr::new(metaloadfn("glUniform4fv", &["glUniform4fvARB"])), + Uniform4i: FnPtr::new(metaloadfn("glUniform4i", &["glUniform4iARB"])), + Uniform4iv: FnPtr::new(metaloadfn("glUniform4iv", &["glUniform4ivARB"])), + Uniform4ui: FnPtr::new(metaloadfn("glUniform4ui", &["glUniform4uiEXT"])), + Uniform4uiv: FnPtr::new(metaloadfn("glUniform4uiv", &["glUniform4uivEXT"])), + UniformBlockBinding: FnPtr::new(metaloadfn("glUniformBlockBinding", &[])), + UniformMatrix2fv: FnPtr::new(metaloadfn("glUniformMatrix2fv", &["glUniformMatrix2fvARB"])), + UniformMatrix2x3fv: FnPtr::new(metaloadfn("glUniformMatrix2x3fv", &["glUniformMatrix2x3fvNV"])), + UniformMatrix2x4fv: FnPtr::new(metaloadfn("glUniformMatrix2x4fv", &["glUniformMatrix2x4fvNV"])), + UniformMatrix3fv: FnPtr::new(metaloadfn("glUniformMatrix3fv", &["glUniformMatrix3fvARB"])), + UniformMatrix3x2fv: FnPtr::new(metaloadfn("glUniformMatrix3x2fv", &["glUniformMatrix3x2fvNV"])), + UniformMatrix3x4fv: FnPtr::new(metaloadfn("glUniformMatrix3x4fv", &["glUniformMatrix3x4fvNV"])), + UniformMatrix4fv: FnPtr::new(metaloadfn("glUniformMatrix4fv", &["glUniformMatrix4fvARB"])), + UniformMatrix4x2fv: FnPtr::new(metaloadfn("glUniformMatrix4x2fv", &["glUniformMatrix4x2fvNV"])), + UniformMatrix4x3fv: FnPtr::new(metaloadfn("glUniformMatrix4x3fv", &["glUniformMatrix4x3fvNV"])), + UnmapBuffer: FnPtr::new(metaloadfn("glUnmapBuffer", &["glUnmapBufferARB", "glUnmapBufferOES"])), + UseProgram: FnPtr::new(metaloadfn("glUseProgram", &["glUseProgramObjectARB"])), + ValidateProgram: FnPtr::new(metaloadfn("glValidateProgram", &["glValidateProgramARB"])), + VertexAttrib1f: FnPtr::new(metaloadfn("glVertexAttrib1f", &["glVertexAttrib1fARB", "glVertexAttrib1fNV"])), + VertexAttrib1fv: FnPtr::new(metaloadfn("glVertexAttrib1fv", &["glVertexAttrib1fvARB", "glVertexAttrib1fvNV"])), + VertexAttrib2f: FnPtr::new(metaloadfn("glVertexAttrib2f", &["glVertexAttrib2fARB", "glVertexAttrib2fNV"])), + VertexAttrib2fv: FnPtr::new(metaloadfn("glVertexAttrib2fv", &["glVertexAttrib2fvARB", "glVertexAttrib2fvNV"])), + VertexAttrib3f: FnPtr::new(metaloadfn("glVertexAttrib3f", &["glVertexAttrib3fARB", "glVertexAttrib3fNV"])), + VertexAttrib3fv: FnPtr::new(metaloadfn("glVertexAttrib3fv", &["glVertexAttrib3fvARB", "glVertexAttrib3fvNV"])), + VertexAttrib4f: FnPtr::new(metaloadfn("glVertexAttrib4f", &["glVertexAttrib4fARB", "glVertexAttrib4fNV"])), + VertexAttrib4fv: FnPtr::new(metaloadfn("glVertexAttrib4fv", &["glVertexAttrib4fvARB", "glVertexAttrib4fvNV"])), + VertexAttribDivisor: FnPtr::new(metaloadfn("glVertexAttribDivisor", &["glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB", "glVertexAttribDivisorEXT", "glVertexAttribDivisorNV"])), + VertexAttribI4i: FnPtr::new(metaloadfn("glVertexAttribI4i", &["glVertexAttribI4iEXT"])), + VertexAttribI4iv: FnPtr::new(metaloadfn("glVertexAttribI4iv", &["glVertexAttribI4ivEXT"])), + VertexAttribI4ui: FnPtr::new(metaloadfn("glVertexAttribI4ui", &["glVertexAttribI4uiEXT"])), + VertexAttribI4uiv: FnPtr::new(metaloadfn("glVertexAttribI4uiv", &["glVertexAttribI4uivEXT"])), + VertexAttribIPointer: FnPtr::new(metaloadfn("glVertexAttribIPointer", &["glVertexAttribIPointerEXT"])), + VertexAttribPointer: FnPtr::new(metaloadfn("glVertexAttribPointer", &["glVertexAttribPointerARB"])), + Viewport: FnPtr::new(metaloadfn("glViewport", &[])), + WaitSync: FnPtr::new(metaloadfn("glWaitSync", &["glWaitSyncAPPLE"])), + _priv: (), + } + } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ActiveTexture(&self, texture: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.ActiveTexture.f)(texture) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn AttachShader(&self, program: types::GLuint, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.AttachShader.f)(program, shader) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BeginQuery(&self, target: types::GLenum, id: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BeginQuery.f)(target, id) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BeginTransformFeedback(&self, primitiveMode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.BeginTransformFeedback.f)(primitiveMode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindAttribLocation(&self, program: types::GLuint, index: types::GLuint, name: *const types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, *const types::GLchar) -> ()>(self.BindAttribLocation.f)(program, index, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindBuffer(&self, target: types::GLenum, buffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindBuffer.f)(target, buffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindBufferBase(&self, target: types::GLenum, index: types::GLuint, buffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint) -> ()>(self.BindBufferBase.f)(target, index, buffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindBufferRange(&self, target: types::GLenum, index: types::GLuint, buffer: types::GLuint, offset: types::GLintptr, size: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint, types::GLintptr, types::GLsizeiptr) -> ()>(self.BindBufferRange.f)(target, index, buffer, offset, size) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindFramebuffer(&self, target: types::GLenum, framebuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindFramebuffer.f)(target, framebuffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindRenderbuffer(&self, target: types::GLenum, renderbuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindRenderbuffer.f)(target, renderbuffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindSampler(&self, unit: types::GLuint, sampler: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.BindSampler.f)(unit, sampler) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindTexture(&self, target: types::GLenum, texture: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindTexture.f)(target, texture) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindTransformFeedback(&self, target: types::GLenum, id: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.BindTransformFeedback.f)(target, id) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BindVertexArray(&self, array: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.BindVertexArray.f)(array) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlendColor(&self, red: types::GLfloat, green: types::GLfloat, blue: types::GLfloat, alpha: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.BlendColor.f)(red, green, blue, alpha) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlendEquation(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.BlendEquation.f)(mode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlendEquationSeparate(&self, modeRGB: types::GLenum, modeAlpha: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.BlendEquationSeparate.f)(modeRGB, modeAlpha) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlendFunc(&self, sfactor: types::GLenum, dfactor: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.BlendFunc.f)(sfactor, dfactor) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlendFuncSeparate(&self, sfactorRGB: types::GLenum, dfactorRGB: types::GLenum, sfactorAlpha: types::GLenum, dfactorAlpha: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLenum) -> ()>(self.BlendFuncSeparate.f)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BlitFramebuffer(&self, srcX0: types::GLint, srcY0: types::GLint, srcX1: types::GLint, srcY1: types::GLint, dstX0: types::GLint, dstY0: types::GLint, dstX1: types::GLint, dstY1: types::GLint, mask: types::GLbitfield, filter: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLbitfield, types::GLenum) -> ()>(self.BlitFramebuffer.f)(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BufferData(&self, target: types::GLenum, size: types::GLsizeiptr, data: *const __gl_imports::raw::c_void, usage: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizeiptr, *const __gl_imports::raw::c_void, types::GLenum) -> ()>(self.BufferData.f)(target, size, data, usage) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn BufferSubData(&self, target: types::GLenum, offset: types::GLintptr, size: types::GLsizeiptr, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr, *const __gl_imports::raw::c_void) -> ()>(self.BufferSubData.f)(target, offset, size, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CheckFramebufferStatus(&self, target: types::GLenum) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLenum>(self.CheckFramebufferStatus.f)(target) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Clear(&self, mask: types::GLbitfield) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLbitfield) -> ()>(self.Clear.f)(mask) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearBufferfi(&self, buffer: types::GLenum, drawbuffer: types::GLint, depth: types::GLfloat, stencil: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLfloat, types::GLint) -> ()>(self.ClearBufferfi.f)(buffer, drawbuffer, depth, stencil) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearBufferfv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLfloat) -> ()>(self.ClearBufferfv.f)(buffer, drawbuffer, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearBufferiv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLint) -> ()>(self.ClearBufferiv.f)(buffer, drawbuffer, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearBufferuiv(&self, buffer: types::GLenum, drawbuffer: types::GLint, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, *const types::GLuint) -> ()>(self.ClearBufferuiv.f)(buffer, drawbuffer, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearColor(&self, red: types::GLfloat, green: types::GLfloat, blue: types::GLfloat, alpha: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.ClearColor.f)(red, green, blue, alpha) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearDepthf(&self, d: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat) -> ()>(self.ClearDepthf.f)(d) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClearStencil(&self, s: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint) -> ()>(self.ClearStencil.f)(s) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ClientWaitSync(&self, sync: types::GLsync, flags: types::GLbitfield, timeout: types::GLuint64) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLbitfield, types::GLuint64) -> types::GLenum>(self.ClientWaitSync.f)(sync, flags, timeout) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ColorMask(&self, red: types::GLboolean, green: types::GLboolean, blue: types::GLboolean, alpha: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLboolean, types::GLboolean, types::GLboolean, types::GLboolean) -> ()>(self.ColorMask.f)(red, green, blue, alpha) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CompileShader(&self, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.CompileShader.f)(shader) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CompressedTexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, border: types::GLint, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLsizei, types::GLsizei, types::GLint, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexImage2D.f)(target, level, internalformat, width, height, border, imageSize, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CompressedTexImage3D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, border: types::GLint, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLsizei, types::GLsizei, types::GLsizei, types::GLint, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexImage3D.f)(target, level, internalformat, width, height, depth, border, imageSize, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CompressedTexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexSubImage2D.f)(target, level, xoffset, yoffset, width, height, format, imageSize, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CompressedTexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, format: types::GLenum, imageSize: types::GLsizei, data: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.CompressedTexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CopyBufferSubData(&self, readTarget: types::GLenum, writeTarget: types::GLenum, readOffset: types::GLintptr, writeOffset: types::GLintptr, size: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLintptr, types::GLintptr, types::GLsizeiptr) -> ()>(self.CopyBufferSubData.f)(readTarget, writeTarget, readOffset, writeOffset, size) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CopyTexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLenum, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei, border: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLint) -> ()>(self.CopyTexImage2D.f)(target, level, internalformat, x, y, width, height, border) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CopyTexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.CopyTexSubImage2D.f)(target, level, xoffset, yoffset, x, y, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CopyTexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.CopyTexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, x, y, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CreateProgram(&self) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn() -> types::GLuint>(self.CreateProgram.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CreateShader(&self, type_: types::GLenum) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLuint>(self.CreateShader.f)(type_) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn CullFace(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.CullFace.f)(mode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteBuffers(&self, n: types::GLsizei, buffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteBuffers.f)(n, buffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteFramebuffers(&self, n: types::GLsizei, framebuffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteFramebuffers.f)(n, framebuffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DeleteProgram.f)(program) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteQueries(&self, n: types::GLsizei, ids: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteQueries.f)(n, ids) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteRenderbuffers(&self, n: types::GLsizei, renderbuffers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteRenderbuffers.f)(n, renderbuffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteSamplers(&self, count: types::GLsizei, samplers: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteSamplers.f)(count, samplers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteShader(&self, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DeleteShader.f)(shader) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteSync(&self, sync: types::GLsync) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync) -> ()>(self.DeleteSync.f)(sync) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteTextures(&self, n: types::GLsizei, textures: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteTextures.f)(n, textures) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteTransformFeedbacks(&self, n: types::GLsizei, ids: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteTransformFeedbacks.f)(n, ids) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DeleteVertexArrays(&self, n: types::GLsizei, arrays: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint) -> ()>(self.DeleteVertexArrays.f)(n, arrays) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DepthFunc(&self, func: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.DepthFunc.f)(func) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DepthMask(&self, flag: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLboolean) -> ()>(self.DepthMask.f)(flag) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DepthRangef(&self, n: types::GLfloat, f: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat) -> ()>(self.DepthRangef.f)(n, f) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DetachShader(&self, program: types::GLuint, shader: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.DetachShader.f)(program, shader) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Disable(&self, cap: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.Disable.f)(cap) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DisableVertexAttribArray(&self, index: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.DisableVertexAttribArray.f)(index) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawArrays(&self, mode: types::GLenum, first: types::GLint, count: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLsizei) -> ()>(self.DrawArrays.f)(mode, first, count) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawArraysInstanced(&self, mode: types::GLenum, first: types::GLint, count: types::GLsizei, instancecount: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.DrawArraysInstanced.f)(mode, first, count, instancecount) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawBuffers(&self, n: types::GLsizei, bufs: *const types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLenum) -> ()>(self.DrawBuffers.f)(n, bufs) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawElements(&self, mode: types::GLenum, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.DrawElements.f)(mode, count, type_, indices) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawElementsInstanced(&self, mode: types::GLenum, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void, instancecount: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.DrawElementsInstanced.f)(mode, count, type_, indices, instancecount) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn DrawRangeElements(&self, mode: types::GLenum, start: types::GLuint, end: types::GLuint, count: types::GLsizei, type_: types::GLenum, indices: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, types::GLuint, types::GLsizei, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.DrawRangeElements.f)(mode, start, end, count, type_, indices) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Enable(&self, cap: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.Enable.f)(cap) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn EnableVertexAttribArray(&self, index: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.EnableVertexAttribArray.f)(index) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn EndQuery(&self, target: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.EndQuery.f)(target) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn EndTransformFeedback(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.EndTransformFeedback.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FenceSync(&self, condition: types::GLenum, flags: types::GLbitfield) -> types::GLsync { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLbitfield) -> types::GLsync>(self.FenceSync.f)(condition, flags) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Finish(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.Finish.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Flush(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.Flush.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FlushMappedBufferRange(&self, target: types::GLenum, offset: types::GLintptr, length: types::GLsizeiptr) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr) -> ()>(self.FlushMappedBufferRange.f)(target, offset, length) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FramebufferRenderbuffer(&self, target: types::GLenum, attachment: types::GLenum, renderbuffertarget: types::GLenum, renderbuffer: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLuint) -> ()>(self.FramebufferRenderbuffer.f)(target, attachment, renderbuffertarget, renderbuffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FramebufferTexture2D(&self, target: types::GLenum, attachment: types::GLenum, textarget: types::GLenum, texture: types::GLuint, level: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLuint, types::GLint) -> ()>(self.FramebufferTexture2D.f)(target, attachment, textarget, texture, level) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FramebufferTextureLayer(&self, target: types::GLenum, attachment: types::GLenum, texture: types::GLuint, level: types::GLint, layer: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLuint, types::GLint, types::GLint) -> ()>(self.FramebufferTextureLayer.f)(target, attachment, texture, level, layer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn FrontFace(&self, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.FrontFace.f)(mode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenBuffers(&self, n: types::GLsizei, buffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenBuffers.f)(n, buffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenFramebuffers(&self, n: types::GLsizei, framebuffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenFramebuffers.f)(n, framebuffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenQueries(&self, n: types::GLsizei, ids: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenQueries.f)(n, ids) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenRenderbuffers(&self, n: types::GLsizei, renderbuffers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenRenderbuffers.f)(n, renderbuffers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenSamplers(&self, count: types::GLsizei, samplers: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenSamplers.f)(count, samplers) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenTextures(&self, n: types::GLsizei, textures: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenTextures.f)(n, textures) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenTransformFeedbacks(&self, n: types::GLsizei, ids: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenTransformFeedbacks.f)(n, ids) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenVertexArrays(&self, n: types::GLsizei, arrays: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *mut types::GLuint) -> ()>(self.GenVertexArrays.f)(n, arrays) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GenerateMipmap(&self, target: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.GenerateMipmap.f)(target) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetActiveAttrib(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLint, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLint, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetActiveAttrib.f)(program, index, bufSize, length, size, type_, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetActiveUniform(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLint, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLint, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetActiveUniform.f)(program, index, bufSize, length, size, type_, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetActiveUniformBlockName(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, uniformBlockName: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetActiveUniformBlockName.f)(program, uniformBlockIndex, bufSize, length, uniformBlockName) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetActiveUniformBlockiv(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetActiveUniformBlockiv.f)(program, uniformBlockIndex, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetActiveUniformsiv(&self, program: types::GLuint, uniformCount: types::GLsizei, uniformIndices: *const types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetActiveUniformsiv.f)(program, uniformCount, uniformIndices, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetAttachedShaders(&self, program: types::GLuint, maxCount: types::GLsizei, count: *mut types::GLsizei, shaders: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLuint) -> ()>(self.GetAttachedShaders.f)(program, maxCount, count, shaders) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetAttribLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetAttribLocation.f)(program, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetBooleanv(&self, pname: types::GLenum, data: *mut types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLboolean) -> ()>(self.GetBooleanv.f)(pname, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetBufferParameteri64v(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint64) -> ()>(self.GetBufferParameteri64v.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetBufferParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetBufferParameteriv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetBufferPointerv(&self, target: types::GLenum, pname: types::GLenum, params: *const *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const *mut __gl_imports::raw::c_void) -> ()>(self.GetBufferPointerv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetError(&self) -> types::GLenum { __gl_imports::mem::transmute::<_, extern "system" fn() -> types::GLenum>(self.GetError.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetFloatv(&self, pname: types::GLenum, data: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLfloat) -> ()>(self.GetFloatv.f)(pname, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetFragDataLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetFragDataLocation.f)(program, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetFramebufferAttachmentParameteriv(&self, target: types::GLenum, attachment: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetFramebufferAttachmentParameteriv.f)(target, attachment, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetInteger64i_v(&self, target: types::GLenum, index: types::GLuint, data: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, *mut types::GLint64) -> ()>(self.GetInteger64i_v.f)(target, index, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetInteger64v(&self, pname: types::GLenum, data: *mut types::GLint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLint64) -> ()>(self.GetInteger64v.f)(pname, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetIntegeri_v(&self, target: types::GLenum, index: types::GLuint, data: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint, *mut types::GLint) -> ()>(self.GetIntegeri_v.f)(target, index, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetIntegerv(&self, pname: types::GLenum, data: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, *mut types::GLint) -> ()>(self.GetIntegerv.f)(pname, data) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetInternalformativ(&self, target: types::GLenum, internalformat: types::GLenum, pname: types::GLenum, bufSize: types::GLsizei, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLsizei, *mut types::GLint) -> ()>(self.GetInternalformativ.f)(target, internalformat, pname, bufSize, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetProgramBinary(&self, program: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, binaryFormat: *mut types::GLenum, binary: *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLenum, *mut __gl_imports::raw::c_void) -> ()>(self.GetProgramBinary.f)(program, bufSize, length, binaryFormat, binary) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetProgramInfoLog(&self, program: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, infoLog: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetProgramInfoLog.f)(program, bufSize, length, infoLog) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetProgramiv(&self, program: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetProgramiv.f)(program, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetQueryObjectuiv(&self, id: types::GLuint, pname: types::GLenum, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLuint) -> ()>(self.GetQueryObjectuiv.f)(id, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetQueryiv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetQueryiv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetRenderbufferParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetRenderbufferParameteriv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetSamplerParameterfv(&self, sampler: types::GLuint, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLfloat) -> ()>(self.GetSamplerParameterfv.f)(sampler, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetSamplerParameteriv(&self, sampler: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetSamplerParameteriv.f)(sampler, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetShaderInfoLog(&self, shader: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, infoLog: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetShaderInfoLog.f)(shader, bufSize, length, infoLog) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetShaderPrecisionFormat(&self, shadertype: types::GLenum, precisiontype: types::GLenum, range: *mut types::GLint, precision: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint, *mut types::GLint) -> ()>(self.GetShaderPrecisionFormat.f)(shadertype, precisiontype, range, precision) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetShaderSource(&self, shader: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, source: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLchar) -> ()>(self.GetShaderSource.f)(shader, bufSize, length, source) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetShaderiv(&self, shader: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetShaderiv.f)(shader, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetString(&self, name: types::GLenum) -> *const types::GLubyte { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> *const types::GLubyte>(self.GetString.f)(name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetStringi(&self, name: types::GLenum, index: types::GLuint) -> *const types::GLubyte { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> *const types::GLubyte>(self.GetStringi.f)(name, index) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetSynciv(&self, sync: types::GLsync, pname: types::GLenum, bufSize: types::GLsizei, length: *mut types::GLsizei, values: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLenum, types::GLsizei, *mut types::GLsizei, *mut types::GLint) -> ()>(self.GetSynciv.f)(sync, pname, bufSize, length, values) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetTexParameterfv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLfloat) -> ()>(self.GetTexParameterfv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetTexParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *mut types::GLint) -> ()>(self.GetTexParameteriv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetTransformFeedbackVarying(&self, program: types::GLuint, index: types::GLuint, bufSize: types::GLsizei, length: *mut types::GLsizei, size: *mut types::GLsizei, type_: *mut types::GLenum, name: *mut types::GLchar) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLsizei, *mut types::GLsizei, *mut types::GLsizei, *mut types::GLenum, *mut types::GLchar) -> ()>(self.GetTransformFeedbackVarying.f)(program, index, bufSize, length, size, type_, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformBlockIndex(&self, program: types::GLuint, uniformBlockName: *const types::GLchar) -> types::GLuint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLuint>(self.GetUniformBlockIndex.f)(program, uniformBlockName) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformIndices(&self, program: types::GLuint, uniformCount: types::GLsizei, uniformNames: *const *const types::GLchar, uniformIndices: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, *mut types::GLuint) -> ()>(self.GetUniformIndices.f)(program, uniformCount, uniformNames, uniformIndices) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformLocation(&self, program: types::GLuint, name: *const types::GLchar) -> types::GLint { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLchar) -> types::GLint>(self.GetUniformLocation.f)(program, name) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformfv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLfloat) -> ()>(self.GetUniformfv.f)(program, location, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformiv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLint) -> ()>(self.GetUniformiv.f)(program, location, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetUniformuiv(&self, program: types::GLuint, location: types::GLint, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, *mut types::GLuint) -> ()>(self.GetUniformuiv.f)(program, location, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetVertexAttribIiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetVertexAttribIiv.f)(index, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetVertexAttribIuiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLuint) -> ()>(self.GetVertexAttribIuiv.f)(index, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetVertexAttribPointerv(&self, index: types::GLuint, pname: types::GLenum, pointer: *const *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const *mut __gl_imports::raw::c_void) -> ()>(self.GetVertexAttribPointerv.f)(index, pname, pointer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetVertexAttribfv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLfloat) -> ()>(self.GetVertexAttribfv.f)(index, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn GetVertexAttribiv(&self, index: types::GLuint, pname: types::GLenum, params: *mut types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *mut types::GLint) -> ()>(self.GetVertexAttribiv.f)(index, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Hint(&self, target: types::GLenum, mode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum) -> ()>(self.Hint.f)(target, mode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn InvalidateFramebuffer(&self, target: types::GLenum, numAttachments: types::GLsizei, attachments: *const types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, *const types::GLenum) -> ()>(self.InvalidateFramebuffer.f)(target, numAttachments, attachments) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn InvalidateSubFramebuffer(&self, target: types::GLenum, numAttachments: types::GLsizei, attachments: *const types::GLenum, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, *const types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.InvalidateSubFramebuffer.f)(target, numAttachments, attachments, x, y, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsBuffer(&self, buffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsBuffer.f)(buffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsEnabled(&self, cap: types::GLenum) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLboolean>(self.IsEnabled.f)(cap) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsFramebuffer(&self, framebuffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsFramebuffer.f)(framebuffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsProgram(&self, program: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsProgram.f)(program) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsQuery(&self, id: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsQuery.f)(id) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsRenderbuffer(&self, renderbuffer: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsRenderbuffer.f)(renderbuffer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsSampler(&self, sampler: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsSampler.f)(sampler) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsShader(&self, shader: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsShader.f)(shader) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsSync(&self, sync: types::GLsync) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync) -> types::GLboolean>(self.IsSync.f)(sync) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsTexture(&self, texture: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsTexture.f)(texture) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsTransformFeedback(&self, id: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsTransformFeedback.f)(id) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn IsVertexArray(&self, array: types::GLuint) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> types::GLboolean>(self.IsVertexArray.f)(array) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn LineWidth(&self, width: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat) -> ()>(self.LineWidth.f)(width) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn LinkProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.LinkProgram.f)(program) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn MapBufferRange(&self, target: types::GLenum, offset: types::GLintptr, length: types::GLsizeiptr, access: types::GLbitfield) -> *mut __gl_imports::raw::c_void { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLintptr, types::GLsizeiptr, types::GLbitfield) -> *mut __gl_imports::raw::c_void>(self.MapBufferRange.f)(target, offset, length, access) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn PauseTransformFeedback(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.PauseTransformFeedback.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn PixelStorei(&self, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint) -> ()>(self.PixelStorei.f)(pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn PolygonOffset(&self, factor: types::GLfloat, units: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLfloat) -> ()>(self.PolygonOffset.f)(factor, units) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ProgramBinary(&self, program: types::GLuint, binaryFormat: types::GLenum, binary: *const __gl_imports::raw::c_void, length: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.ProgramBinary.f)(program, binaryFormat, binary, length) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ProgramParameteri(&self, program: types::GLuint, pname: types::GLenum, value: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLint) -> ()>(self.ProgramParameteri.f)(program, pname, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ReadBuffer(&self, src: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> ()>(self.ReadBuffer.f)(src) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ReadPixels(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *mut __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *mut __gl_imports::raw::c_void) -> ()>(self.ReadPixels.f)(x, y, width, height, format, type_, pixels) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ReleaseShaderCompiler(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.ReleaseShaderCompiler.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn RenderbufferStorage(&self, target: types::GLenum, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.RenderbufferStorage.f)(target, internalformat, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn RenderbufferStorageMultisample(&self, target: types::GLenum, samples: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.RenderbufferStorageMultisample.f)(target, samples, internalformat, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ResumeTransformFeedback(&self) -> () { __gl_imports::mem::transmute::<_, extern "system" fn() -> ()>(self.ResumeTransformFeedback.f)() } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn SampleCoverage(&self, value: types::GLfloat, invert: types::GLboolean) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLfloat, types::GLboolean) -> ()>(self.SampleCoverage.f)(value, invert) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn SamplerParameterf(&self, sampler: types::GLuint, pname: types::GLenum, param: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLfloat) -> ()>(self.SamplerParameterf.f)(sampler, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn SamplerParameterfv(&self, sampler: types::GLuint, pname: types::GLenum, param: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const types::GLfloat) -> ()>(self.SamplerParameterfv.f)(sampler, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn SamplerParameteri(&self, sampler: types::GLuint, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, types::GLint) -> ()>(self.SamplerParameteri.f)(sampler, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn SamplerParameteriv(&self, sampler: types::GLuint, pname: types::GLenum, param: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLenum, *const types::GLint) -> ()>(self.SamplerParameteriv.f)(sampler, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Scissor(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.Scissor.f)(x, y, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ShaderBinary(&self, count: types::GLsizei, shaders: *const types::GLuint, binaryformat: types::GLenum, binary: *const __gl_imports::raw::c_void, length: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsizei, *const types::GLuint, types::GLenum, *const __gl_imports::raw::c_void, types::GLsizei) -> ()>(self.ShaderBinary.f)(count, shaders, binaryformat, binary, length) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ShaderSource(&self, shader: types::GLuint, count: types::GLsizei, string: *const *const types::GLchar, length: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, *const types::GLint) -> ()>(self.ShaderSource.f)(shader, count, string, length) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilFunc(&self, func: types::GLenum, ref_: types::GLint, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLuint) -> ()>(self.StencilFunc.f)(func, ref_, mask) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilFuncSeparate(&self, face: types::GLenum, func: types::GLenum, ref_: types::GLint, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLint, types::GLuint) -> ()>(self.StencilFuncSeparate.f)(face, func, ref_, mask) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilMask(&self, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.StencilMask.f)(mask) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilMaskSeparate(&self, face: types::GLenum, mask: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLuint) -> ()>(self.StencilMaskSeparate.f)(face, mask) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilOp(&self, fail: types::GLenum, zfail: types::GLenum, zpass: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum) -> ()>(self.StencilOp.f)(fail, zfail, zpass) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn StencilOpSeparate(&self, face: types::GLenum, sfail: types::GLenum, dpfail: types::GLenum, dppass: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLenum, types::GLenum) -> ()>(self.StencilOpSeparate.f)(face, sfail, dpfail, dppass) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexImage2D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLint, width: types::GLsizei, height: types::GLsizei, border: types::GLint, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLint, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexImage2D.f)(target, level, internalformat, width, height, border, format, type_, pixels) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexImage3D(&self, target: types::GLenum, level: types::GLint, internalformat: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, border: types::GLint, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLint, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexImage3D.f)(target, level, internalformat, width, height, depth, border, format, type_, pixels) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexParameterf(&self, target: types::GLenum, pname: types::GLenum, param: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLfloat) -> ()>(self.TexParameterf.f)(target, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexParameterfv(&self, target: types::GLenum, pname: types::GLenum, params: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const types::GLfloat) -> ()>(self.TexParameterfv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexParameteri(&self, target: types::GLenum, pname: types::GLenum, param: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, types::GLint) -> ()>(self.TexParameteri.f)(target, pname, param) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexParameteriv(&self, target: types::GLenum, pname: types::GLenum, params: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLenum, *const types::GLint) -> ()>(self.TexParameteriv.f)(target, pname, params) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexStorage2D(&self, target: types::GLenum, levels: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei) -> ()>(self.TexStorage2D.f)(target, levels, internalformat, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexStorage3D(&self, target: types::GLenum, levels: types::GLsizei, internalformat: types::GLenum, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLsizei, types::GLenum, types::GLsizei, types::GLsizei, types::GLsizei) -> ()>(self.TexStorage3D.f)(target, levels, internalformat, width, height, depth) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexSubImage2D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexSubImage2D.f)(target, level, xoffset, yoffset, width, height, format, type_, pixels) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TexSubImage3D(&self, target: types::GLenum, level: types::GLint, xoffset: types::GLint, yoffset: types::GLint, zoffset: types::GLint, width: types::GLsizei, height: types::GLsizei, depth: types::GLsizei, format: types::GLenum, type_: types::GLenum, pixels: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum, types::GLint, types::GLint, types::GLint, types::GLint, types::GLsizei, types::GLsizei, types::GLsizei, types::GLenum, types::GLenum, *const __gl_imports::raw::c_void) -> ()>(self.TexSubImage3D.f)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn TransformFeedbackVaryings(&self, program: types::GLuint, count: types::GLsizei, varyings: *const *const types::GLchar, bufferMode: types::GLenum) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLsizei, *const *const types::GLchar, types::GLenum) -> ()>(self.TransformFeedbackVaryings.f)(program, count, varyings, bufferMode) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1f(&self, location: types::GLint, v0: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat) -> ()>(self.Uniform1f.f)(location, v0) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform1fv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1i(&self, location: types::GLint, v0: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint) -> ()>(self.Uniform1i.f)(location, v0) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform1iv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1ui(&self, location: types::GLint, v0: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint) -> ()>(self.Uniform1ui.f)(location, v0) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform1uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform1uiv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat) -> ()>(self.Uniform2f.f)(location, v0, v1) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform2fv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform2i.f)(location, v0, v1) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform2iv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint) -> ()>(self.Uniform2ui.f)(location, v0, v1) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform2uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform2uiv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat, v2: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.Uniform3f.f)(location, v0, v1, v2) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform3fv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint, v2: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform3i.f)(location, v0, v1, v2) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform3iv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint, v2: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.Uniform3ui.f)(location, v0, v1, v2) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform3uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform3uiv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4f(&self, location: types::GLint, v0: types::GLfloat, v1: types::GLfloat, v2: types::GLfloat, v3: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.Uniform4f.f)(location, v0, v1, v2, v3) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4fv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLfloat) -> ()>(self.Uniform4fv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4i(&self, location: types::GLint, v0: types::GLint, v1: types::GLint, v2: types::GLint, v3: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.Uniform4i.f)(location, v0, v1, v2, v3) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4iv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLint) -> ()>(self.Uniform4iv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4ui(&self, location: types::GLint, v0: types::GLuint, v1: types::GLuint, v2: types::GLuint, v3: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLuint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.Uniform4ui.f)(location, v0, v1, v2, v3) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Uniform4uiv(&self, location: types::GLint, count: types::GLsizei, value: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, *const types::GLuint) -> ()>(self.Uniform4uiv.f)(location, count, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformBlockBinding(&self, program: types::GLuint, uniformBlockIndex: types::GLuint, uniformBlockBinding: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLuint) -> ()>(self.UniformBlockBinding.f)(program, uniformBlockIndex, uniformBlockBinding) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix2x3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2x3fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix2x4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix2x4fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix3x2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3x2fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix3x4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix3x4fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix4fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix4x2fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4x2fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UniformMatrix4x3fv(&self, location: types::GLint, count: types::GLsizei, transpose: types::GLboolean, value: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLsizei, types::GLboolean, *const types::GLfloat) -> ()>(self.UniformMatrix4x3fv.f)(location, count, transpose, value) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UnmapBuffer(&self, target: types::GLenum) -> types::GLboolean { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLenum) -> types::GLboolean>(self.UnmapBuffer.f)(target) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn UseProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.UseProgram.f)(program) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn ValidateProgram(&self, program: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint) -> ()>(self.ValidateProgram.f)(program) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib1f(&self, index: types::GLuint, x: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat) -> ()>(self.VertexAttrib1f.f)(index, x) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib1fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib1fv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib2f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib2f.f)(index, x, y) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib2fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib2fv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib3f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat, z: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib3f.f)(index, x, y, z) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib3fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib3fv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib4f(&self, index: types::GLuint, x: types::GLfloat, y: types::GLfloat, z: types::GLfloat, w: types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLfloat, types::GLfloat, types::GLfloat, types::GLfloat) -> ()>(self.VertexAttrib4f.f)(index, x, y, z, w) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttrib4fv(&self, index: types::GLuint, v: *const types::GLfloat) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLfloat) -> ()>(self.VertexAttrib4fv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribDivisor(&self, index: types::GLuint, divisor: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint) -> ()>(self.VertexAttribDivisor.f)(index, divisor) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribI4i(&self, index: types::GLuint, x: types::GLint, y: types::GLint, z: types::GLint, w: types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLint, types::GLint, types::GLint) -> ()>(self.VertexAttribI4i.f)(index, x, y, z, w) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribI4iv(&self, index: types::GLuint, v: *const types::GLint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLint) -> ()>(self.VertexAttribI4iv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribI4ui(&self, index: types::GLuint, x: types::GLuint, y: types::GLuint, z: types::GLuint, w: types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLuint, types::GLuint, types::GLuint, types::GLuint) -> ()>(self.VertexAttribI4ui.f)(index, x, y, z, w) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribI4uiv(&self, index: types::GLuint, v: *const types::GLuint) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, *const types::GLuint) -> ()>(self.VertexAttribI4uiv.f)(index, v) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribIPointer(&self, index: types::GLuint, size: types::GLint, type_: types::GLenum, stride: types::GLsizei, pointer: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLenum, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.VertexAttribIPointer.f)(index, size, type_, stride, pointer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn VertexAttribPointer(&self, index: types::GLuint, size: types::GLint, type_: types::GLenum, normalized: types::GLboolean, stride: types::GLsizei, pointer: *const __gl_imports::raw::c_void) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLuint, types::GLint, types::GLenum, types::GLboolean, types::GLsizei, *const __gl_imports::raw::c_void) -> ()>(self.VertexAttribPointer.f)(index, size, type_, normalized, stride, pointer) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn Viewport(&self, x: types::GLint, y: types::GLint, width: types::GLsizei, height: types::GLsizei) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLint, types::GLint, types::GLsizei, types::GLsizei) -> ()>(self.Viewport.f)(x, y, width, height) } + #[allow(non_snake_case, unused_variables, dead_code)] + #[inline] + pub unsafe fn WaitSync(&self, sync: types::GLsync, flags: types::GLbitfield, timeout: types::GLuint64) -> () { __gl_imports::mem::transmute::<_, extern "system" fn(types::GLsync, types::GLbitfield, types::GLuint64) -> ()>(self.WaitSync.f)(sync, flags, timeout) } } - unsafe impl __gl_imports::Send for Gles2 {} +unsafe impl __gl_imports::Send for Gles2 {} diff --git a/src/framework/graphics.rs b/src/framework/graphics.rs index 0685c5e..b912879 100644 --- a/src/framework/graphics.rs +++ b/src/framework/graphics.rs @@ -178,7 +178,7 @@ pub fn prepare_draw(ctx: &mut Context) -> GameResult { pub fn supports_vertex_draw(ctx: &Context) -> GameResult { if let Some(renderer) = ctx.renderer.as_ref() { - return Ok(renderer.supports_vertex_draw()) + return Ok(renderer.supports_vertex_draw()); } Err(GameError::RenderError("Rendering backend hasn't been initialized yet.".to_string())) diff --git a/src/framework/render_opengl.rs b/src/framework/render_opengl.rs index c1edb72..f62d4f7 100644 --- a/src/framework/render_opengl.rs +++ b/src/framework/render_opengl.rs @@ -17,9 +17,9 @@ use crate::framework::error::GameError::RenderError; use crate::framework::error::GameResult; use crate::framework::gl; use crate::framework::gl::types::*; -use crate::framework::graphics::BlendMode; +use crate::framework::graphics::{BlendMode, VSyncMode}; use crate::framework::util::{field_offset, return_param}; -use crate::graphics::VSyncMode; +use crate::game::GAME_SUSPENDED; pub struct GLContext { pub gles2_mode: bool, @@ -774,7 +774,7 @@ impl BackendRenderer for OpenGLRenderer { fn present(&mut self) -> GameResult { { - let mutex = crate::GAME_SUSPENDED.lock().unwrap(); + let mutex = GAME_SUSPENDED.lock().unwrap(); if *mutex { return Ok(()); } @@ -826,7 +826,7 @@ impl BackendRenderer for OpenGLRenderer { } #[cfg(feature = "backend-sdl")] - unsafe { + unsafe { let ctx = &mut *self.refs.ctx; match mode { diff --git a/src/framework/ui.rs b/src/framework/ui.rs index 09b6b70..b140f64 100644 --- a/src/framework/ui.rs +++ b/src/framework/ui.rs @@ -5,11 +5,10 @@ use imgui::sys::*; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::framework::graphics::{imgui_context, render_imgui}; -use crate::graphics::prepare_imgui; +use crate::framework::graphics::{imgui_context, prepare_imgui, render_imgui}; +use crate::game::shared_game_state::SharedGameState; use crate::live_debugger::LiveDebugger; use crate::scene::Scene; -use crate::shared_game_state::SharedGameState; pub struct UI { pub components: Components, @@ -23,11 +22,7 @@ pub struct Components { pub fn init_imgui() -> GameResult { let mut imgui = imgui::Context::create(); imgui.set_ini_filename(None); - imgui.fonts().add_font(&[ - FontSource::DefaultFontData { - config: Some(FontConfig::default()), - }, - ]); + imgui.fonts().add_font(&[FontSource::DefaultFontData { config: Some(FontConfig::default()) }]); imgui.style_mut().window_padding = [4.0, 6.0]; imgui.style_mut().frame_padding = [8.0, 6.0]; @@ -109,16 +104,11 @@ pub fn init_imgui() -> GameResult { impl UI { pub fn new(_ctx: &mut Context) -> GameResult { - Ok(Self { - components: Components { - live_debugger: LiveDebugger::new(), - }, - last_frame: Instant::now(), - }) + Ok(Self { components: Components { live_debugger: LiveDebugger::new() }, last_frame: Instant::now() }) } pub fn draw(&mut self, state: &mut SharedGameState, ctx: &mut Context, scene: &mut Box) -> GameResult { - let ctx2 = unsafe { &mut *(ctx as *const Context as *mut Context)}; + let ctx2 = unsafe { &mut *(ctx as *const Context as *mut Context) }; let imgui = imgui_context(ctx)?; let io = imgui.io_mut(); let now = Instant::now(); diff --git a/src/framework/vfs.rs b/src/framework/vfs.rs index 50a4d1a..ce09442 100644 --- a/src/framework/vfs.rs +++ b/src/framework/vfs.rs @@ -128,7 +128,7 @@ pub trait VFS: Debug { fn metadata(&self, path: &Path) -> GameResult>; /// Retrieve all file and directory entries in the given directory. - fn read_dir(&self, path: &Path) -> GameResult>>>; + fn read_dir(&self, path: &Path) -> GameResult>>>; /// Retrieve the actual location of the VFS root, if available. fn to_path_buf(&self) -> Option; @@ -376,7 +376,7 @@ impl VFS for PhysicalFS { } /// Retrieve the path entries in this path - fn read_dir(&self, path: &Path) -> GameResult>>> { + fn read_dir(&self, path: &Path) -> GameResult>>> { self.create_root()?; let p = self.to_absolute(path)?; // This is inconvenient because path() returns the full absolute @@ -511,7 +511,7 @@ impl VFS for OverlayFS { } /// Retrieve the path entries in this path - fn read_dir(&self, path: &Path) -> GameResult>>> { + fn read_dir(&self, path: &Path) -> GameResult>>> { // This is tricky 'cause we have to actually merge iterators together... // Doing it the simple and stupid way works though. let mut v = Vec::new(); diff --git a/src/caret.rs b/src/game/caret.rs similarity index 99% rename from src/caret.rs rename to src/game/caret.rs index 8103e3b..fb0eba1 100644 --- a/src/caret.rs +++ b/src/game/caret.rs @@ -1,6 +1,6 @@ -use crate::common::{Condition, Direction, Rect, CDEG_RAD}; +use crate::common::{CDEG_RAD, Condition, Direction, Rect}; use crate::engine_constants::EngineConstants; -use crate::rng::RNG; +use crate::util::rng::RNG; #[derive(Debug, EnumIter, PartialEq, Eq, Hash, Copy, Clone)] pub enum CaretType { diff --git a/src/frame.rs b/src/game/frame.rs similarity index 97% rename from src/frame.rs rename to src/game/frame.rs index 2779b74..d7f6eba 100644 --- a/src/frame.rs +++ b/src/game/frame.rs @@ -1,7 +1,7 @@ use crate::common::{fix9_scale, interpolate_fix9_scale}; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u8)] diff --git a/src/inventory.rs b/src/game/inventory.rs similarity index 97% rename from src/inventory.rs rename to src/game/inventory.rs index 6ba390d..0dcc50a 100644 --- a/src/inventory.rs +++ b/src/game/inventory.rs @@ -1,10 +1,10 @@ use std::cmp::Ordering; use crate::engine_constants::EngineConstants; -use crate::shared_game_state::SharedGameState; -use crate::weapon::{Weapon, WeaponLevel, WeaponType}; -use crate::player::{Player, TargetPlayer}; -use crate::weapon::bullet::BulletManager; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel, WeaponType}; +use crate::game::weapon::bullet::BulletManager; #[derive(Clone, Copy)] /// (id, amount) diff --git a/src/map.rs b/src/game/map.rs similarity index 98% rename from src/map.rs rename to src/game/map.rs index 2930e65..17faf11 100644 --- a/src/map.rs +++ b/src/game/map.rs @@ -3,16 +3,16 @@ use std::io; use std::io::{BufRead, BufReader, Cursor, Read}; use std::sync::Arc; -use byteorder::{ReadBytesExt, LE}; +use byteorder::{LE, ReadBytesExt}; use crate::common::{Color, Rect}; -use crate::encoding::read_cur_shift_jis; use crate::framework::context::Context; -use crate::framework::error::GameError::ResourceLoadError; use crate::framework::error::{GameError, GameResult}; +use crate::framework::error::GameError::ResourceLoadError; use crate::framework::filesystem; -use crate::shared_game_state::TileSize; -use crate::stage::{PxPackScroll, PxPackStageData, StageData}; +use crate::game::shared_game_state::TileSize; +use crate::game::stage::{PxPackScroll, PxPackStageData, StageData}; +use crate::util::encoding::read_cur_shift_jis; static SUPPORTED_PXM_VERSIONS: [u8; 1] = [0x10]; static SUPPORTED_PXE_VERSIONS: [u8; 2] = [0, 0x10]; @@ -211,7 +211,7 @@ impl Map { log::warn!("Map attribute data is shorter than 256 bytes!"); } } else if let Ok(mut attrib_data) = - filesystem::open_find(ctx, roots, ["Stage/", &tileset_fg, ".pxattr"].join("")) + filesystem::open_find(ctx, roots, ["Stage/", &tileset_fg, ".pxattr"].join("")) { attrib_data.read_exact(&mut magic)?; @@ -549,7 +549,7 @@ impl WaterParams { } pub fn load_from(&mut self, data: R) -> GameResult { - fn next_u8<'a>(s: &mut impl Iterator, error_msg: &str) -> GameResult { + fn next_u8<'a>(s: &mut impl Iterator, error_msg: &str) -> GameResult { match s.next() { None => Err(GameError::ParseError("Out of range.".to_string())), Some(v) => v.trim().parse::().map_err(|_| GameError::ParseError(error_msg.to_string())), diff --git a/src/game/mod.rs b/src/game/mod.rs new file mode 100644 index 0000000..7b0254a --- /dev/null +++ b/src/game/mod.rs @@ -0,0 +1,329 @@ +use std::cell::UnsafeCell; +use std::path::PathBuf; +use std::sync::Mutex; +use std::time::{Duration, Instant}; + +use lazy_static::lazy_static; + +use scripting::tsc::text_script::ScriptMode; + +use crate::data::builtin_fs::BuiltinFS; +use crate::framework::context::Context; +use crate::framework::error::GameResult; +use crate::framework::filesystem::{mount_user_vfs, mount_vfs}; +use crate::framework::graphics; +use crate::framework::graphics::VSyncMode; +use crate::framework::ui::UI; +use crate::framework::vfs::PhysicalFS; +use crate::game::shared_game_state::{Fps, SharedGameState, TimingMode}; +use crate::graphics::texture_set::{G_MAG, I_MAG}; +use crate::scene::loading_scene::LoadingScene; +use crate::scene::Scene; + +pub mod caret; +pub mod frame; +pub mod inventory; +pub mod map; +pub mod physics; +pub mod profile; +pub mod settings; +pub mod shared_game_state; +pub mod stage; +pub mod npc; +pub mod player; +pub mod weapon; +pub mod scripting; + +pub struct LaunchOptions { + pub server_mode: bool, + pub editor: bool, +} + +lazy_static! { + pub static ref GAME_SUSPENDED: Mutex = Mutex::new(false); +} + +pub struct Game { + pub(crate) scene: Option>, + pub(crate) state: UnsafeCell, + ui: UI, + start_time: Instant, + last_tick: u128, + next_tick: u128, + pub(crate) loops: u32, + next_tick_draw: u128, + present: bool, + fps: Fps, +} + +impl Game { + fn new(ctx: &mut Context) -> GameResult { + let s = Game { + scene: None, + ui: UI::new(ctx)?, + state: UnsafeCell::new(SharedGameState::new(ctx)?), + start_time: Instant::now(), + last_tick: 0, + next_tick: 0, + loops: 0, + next_tick_draw: 0, + present: true, + fps: Fps::new(), + }; + + Ok(s) + } + + pub(crate) fn update(&mut self, ctx: &mut Context) -> GameResult { + if let Some(scene) = &mut self.scene { + let state_ref = unsafe { &mut *self.state.get() }; + + let speed = + if state_ref.textscript_vm.mode == ScriptMode::Map && state_ref.textscript_vm.flags.cutscene_skip() { + 4.0 * state_ref.settings.speed + } else { + 1.0 * state_ref.settings.speed + }; + + match state_ref.settings.timing_mode { + TimingMode::_50Hz | TimingMode::_60Hz => { + let last_tick = self.next_tick; + + while self.start_time.elapsed().as_nanos() >= self.next_tick && self.loops < 10 { + if (speed - 1.0).abs() < 0.01 { + self.next_tick += state_ref.settings.timing_mode.get_delta() as u128; + } else { + self.next_tick += (state_ref.settings.timing_mode.get_delta() as f64 / speed) as u128; + } + self.loops += 1; + } + + if self.loops == 10 { + log::warn!("Frame skip is way too high, a long system lag occurred?"); + self.last_tick = self.start_time.elapsed().as_nanos(); + self.next_tick = + self.last_tick + (state_ref.settings.timing_mode.get_delta() as f64 / speed) as u128; + self.loops = 0; + } + + if self.loops != 0 { + scene.draw_tick(state_ref)?; + self.last_tick = last_tick; + } + + for _ in 0..self.loops { + scene.tick(state_ref, ctx)?; + } + self.fps.tick_count = self.fps.tick_count.saturating_add(self.loops as u32); + } + TimingMode::FrameSynchronized => { + scene.tick(state_ref, ctx)?; + } + } + } + Ok(()) + } + + pub(crate) fn draw(&mut self, ctx: &mut Context) -> GameResult { + let state_ref = unsafe { &mut *self.state.get() }; + + match ctx.vsync_mode { + VSyncMode::Uncapped | VSyncMode::VSync => { + self.present = true; + } + _ => unsafe { + self.present = false; + + let divisor = match ctx.vsync_mode { + VSyncMode::VRRTickSync1x => 1, + VSyncMode::VRRTickSync2x => 2, + VSyncMode::VRRTickSync3x => 3, + _ => std::hint::unreachable_unchecked(), + }; + + let delta = (state_ref.settings.timing_mode.get_delta() / divisor) as u64; + + let now = self.start_time.elapsed().as_nanos(); + if now > self.next_tick_draw + delta as u128 * 4 { + self.next_tick_draw = now; + } + + while self.start_time.elapsed().as_nanos() >= self.next_tick_draw { + self.next_tick_draw += delta as u128; + self.present = true; + } + }, + } + + if !self.present { + std::thread::sleep(Duration::from_millis(2)); + self.loops = 0; + return Ok(()); + } + + if ctx.headless { + self.loops = 0; + state_ref.frame_time = 1.0; + return Ok(()); + } + + if state_ref.settings.timing_mode != TimingMode::FrameSynchronized { + let mut elapsed = self.start_time.elapsed().as_nanos(); + + // Even with the non-monotonic Instant mitigation at the start of the event loop, there's still a chance of it not working. + // This check here should trigger if that happens and makes sure there's no panic from an underflow. + if elapsed < self.last_tick { + elapsed = self.last_tick; + } + + let n1 = (elapsed - self.last_tick) as f64; + let n2 = (self.next_tick - self.last_tick) as f64; + state_ref.frame_time = if state_ref.settings.motion_interpolation { n1 / n2 } else { 1.0 }; + } + unsafe { + G_MAG = if state_ref.settings.subpixel_coords { state_ref.scale } else { 1.0 }; + I_MAG = state_ref.scale; + } + self.loops = 0; + + graphics::prepare_draw(ctx)?; + graphics::clear(ctx, [0.0, 0.0, 0.0, 1.0].into()); + + if let Some(scene) = &mut self.scene { + scene.draw(state_ref, ctx)?; + if state_ref.settings.touch_controls { + state_ref.touch_controls.draw( + state_ref.canvas_size, + state_ref.scale, + &state_ref.constants, + &mut state_ref.texture_set, + ctx, + )?; + } + + if state_ref.settings.fps_counter { + self.fps.act(state_ref, ctx, self.start_time.elapsed().as_nanos())?; + } + + self.ui.draw(state_ref, ctx, scene)?; + } + + graphics::present(ctx)?; + + Ok(()) + } +} + +pub fn init(options: LaunchOptions) -> GameResult { + let _ = simple_logger::SimpleLogger::new() + .without_timestamps() + .with_colors(true) + .with_level(log::Level::Info.to_level_filter()) + .init(); + + #[cfg(not(target_os = "android"))] + let resource_dir = if let Ok(data_dir) = std::env::var("CAVESTORY_DATA_DIR") { + PathBuf::from(data_dir) + } else { + let mut resource_dir = std::env::current_exe()?; + if resource_dir.file_name().is_some() { + let _ = resource_dir.pop(); + } + + #[cfg(target_os = "macos")] + { + let mut bundle_dir = resource_dir.clone(); + let _ = bundle_dir.pop(); + let mut bundle_exec_dir = bundle_dir.clone(); + let mut csplus_data_dir = bundle_dir.clone(); + let _ = csplus_data_dir.pop(); + let _ = csplus_data_dir.pop(); + let mut csplus_data_base_dir = csplus_data_dir.clone(); + csplus_data_base_dir.push("data"); + csplus_data_base_dir.push("base"); + + bundle_exec_dir.push("MacOS"); + bundle_dir.push("Resources"); + + if bundle_exec_dir.is_dir() && bundle_dir.is_dir() { + log::info!("Running in macOS bundle mode"); + + if csplus_data_base_dir.is_dir() { + log::info!("Cave Story+ Steam detected"); + resource_dir = csplus_data_dir; + } else { + resource_dir = bundle_dir; + } + } + } + + resource_dir.push("data"); + resource_dir + }; + + #[cfg(not(target_os = "android"))] + log::info!("Resource directory: {:?}", resource_dir); + log::info!("Initializing engine..."); + + let mut context = Context::new(); + #[cfg(not(target_os = "android"))] + mount_vfs(&mut context, Box::new(PhysicalFS::new(&resource_dir, true))); + + #[cfg(not(target_os = "android"))] + let project_dirs = match directories::ProjectDirs::from("", "", "doukutsu-rs") { + Some(dirs) => dirs, + None => { + use crate::framework::error::GameError; + return Err(GameError::FilesystemError(String::from("No valid home directory path could be retrieved."))); + } + }; + #[cfg(target_os = "android")] + { + let mut data_path = + PathBuf::from(ndk_glue::native_activity().internal_data_path().to_string_lossy().to_string()); + let mut user_path = data_path.clone(); + + data_path.push("data"); + user_path.push("saves"); + + let _ = std::fs::create_dir_all(&data_path); + let _ = std::fs::create_dir_all(&user_path); + + log::info!("Android data directories: data_path={:?} user_path={:?}", &data_path, &user_path); + + mount_vfs(&mut context, Box::new(PhysicalFS::new(&data_path, true))); + mount_user_vfs(&mut context, Box::new(PhysicalFS::new(&user_path, false))); + } + + #[cfg(not(target_os = "android"))] + { + if crate::framework::filesystem::open(&context, "/.drs_localstorage").is_ok() { + let mut user_dir = resource_dir.clone(); + user_dir.push("_drs_profile"); + + let _ = std::fs::create_dir_all(&user_dir); + mount_user_vfs(&mut context, Box::new(PhysicalFS::new(&user_dir, false))); + } else { + mount_user_vfs(&mut context, Box::new(PhysicalFS::new(project_dirs.data_local_dir(), false))); + } + } + + mount_vfs(&mut context, Box::new(BuiltinFS::new())); + + if options.server_mode { + log::info!("Running in server mode..."); + context.headless = true; + } + + let game = UnsafeCell::new(Game::new(&mut context)?); + let state_ref = unsafe { &mut *((&mut *game.get()).state.get()) }; + #[cfg(feature = "scripting-lua")] + { + state_ref.lua.update_refs(unsafe { (&*game.get()).state.get() }, &mut context as *mut Context); + } + + state_ref.next_scene = Some(Box::new(LoadingScene::new())); + context.run(unsafe { &mut *game.get() })?; + + Ok(()) +} diff --git a/src/npc/ai/balcony.rs b/src/game/npc/ai/balcony.rs similarity index 97% rename from src/npc/ai/balcony.rs rename to src/game/npc/ai/balcony.rs index 7f5af68..51510cc 100644 --- a/src/npc/ai/balcony.rs +++ b/src/game/npc/ai/balcony.rs @@ -1,9 +1,10 @@ use crate::common::Direction; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::{GameResult, SharedGameState}; +use crate::framework::error::GameResult; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n254_helicopter(&mut self, state: &mut SharedGameState, npc_list: &NPCList) -> GameResult { diff --git a/src/npc/ai/balrog.rs b/src/game/npc/ai/balrog.rs similarity index 99% rename from src/npc/ai/balrog.rs rename to src/game/npc/ai/balrog.rs index f8d36c0..bcdeff3 100644 --- a/src/npc/ai/balrog.rs +++ b/src/game/npc/ai/balrog.rs @@ -1,14 +1,14 @@ use num_traits::clamp; -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n009_balrog_falling_in( diff --git a/src/npc/ai/booster.rs b/src/game/npc/ai/booster.rs similarity index 96% rename from src/npc/ai/booster.rs rename to src/game/npc/ai/booster.rs index d410d1d..2109b0d 100644 --- a/src/npc/ai/booster.rs +++ b/src/game/npc/ai/booster.rs @@ -1,9 +1,8 @@ -use crate::framework::error::GameResult; - use crate::common::Direction; -use crate::npc::NPC; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::framework::error::GameResult; +use crate::game::npc::NPC; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n113_professor_booster(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/chaco.rs b/src/game/npc/ai/chaco.rs similarity index 92% rename from src/npc/ai/chaco.rs rename to src/game/npc/ai/chaco.rs index 604ed3f..db5ef49 100644 --- a/src/npc/ai/chaco.rs +++ b/src/game/npc/ai/chaco.rs @@ -1,11 +1,10 @@ -use crate::framework::error::GameResult; - -use crate::caret::CaretType; use crate::common::Direction; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::framework::error::GameResult; +use crate::game::caret::CaretType; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n093_chaco(&mut self, state: &mut SharedGameState, players: [&mut Player; 2]) -> GameResult { diff --git a/src/npc/ai/characters.rs b/src/game/npc/ai/characters.rs similarity index 99% rename from src/npc/ai/characters.rs rename to src/game/npc/ai/characters.rs index c48760c..1cac767 100644 --- a/src/npc/ai/characters.rs +++ b/src/game/npc/ai/characters.rs @@ -2,11 +2,11 @@ use num_traits::{abs, clamp}; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n029_cthulhu(&mut self, state: &mut SharedGameState, players: [&mut Player; 2]) -> GameResult { diff --git a/src/npc/ai/curly.rs b/src/game/npc/ai/curly.rs similarity index 97% rename from src/npc/ai/curly.rs rename to src/game/npc/ai/curly.rs index e2c6a67..b754d09 100644 --- a/src/npc/ai/curly.rs +++ b/src/game/npc/ai/curly.rs @@ -1,14 +1,14 @@ use num_traits::{abs, clamp}; -use crate::caret::CaretType; use crate::common::{Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::{Player, TargetPlayer}; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n117_curly( @@ -581,12 +581,12 @@ impl NPC { } else { self.x = parent.x + if parent.direction == Direction::Left { - self.direction = Direction::Left; - -0x1000 - } else { - self.direction = Direction::Right; - 0x1000 - }; + self.direction = Direction::Left; + -0x1000 + } else { + self.direction = Direction::Right; + 0x1000 + }; self.y = parent.y; self.anim_num = 0; } @@ -675,12 +675,12 @@ impl NPC { } else { self.x = parent.x + if parent.direction == Direction::Left { - self.direction = Direction::Left; - -0x1000 - } else { - self.direction = Direction::Right; - 0x1000 - }; + self.direction = Direction::Left; + -0x1000 + } else { + self.direction = Direction::Right; + 0x1000 + }; self.y = parent.y; self.anim_num = 0; } diff --git a/src/npc/ai/doctor.rs b/src/game/npc/ai/doctor.rs similarity index 99% rename from src/npc/ai/doctor.rs rename to src/game/npc/ai/doctor.rs index 413bc21..0eebfd4 100644 --- a/src/npc/ai/doctor.rs +++ b/src/game/npc/ai/doctor.rs @@ -1,11 +1,11 @@ -use crate::common::{Direction, Rect, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n139_doctor(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/egg_corridor.rs b/src/game/npc/ai/egg_corridor.rs similarity index 99% rename from src/npc/ai/egg_corridor.rs rename to src/game/npc/ai/egg_corridor.rs index 90e29dd..0cbc820 100644 --- a/src/npc/ai/egg_corridor.rs +++ b/src/game/npc/ai/egg_corridor.rs @@ -1,14 +1,14 @@ use num_traits::{abs, clamp}; -use crate::caret::CaretType; -use crate::common::{Direction, Rect, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::{Player, TargetPlayer}; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n002_behemoth(&mut self, state: &mut SharedGameState, npc_list: &NPCList) -> GameResult { diff --git a/src/npc/ai/first_cave.rs b/src/game/npc/ai/first_cave.rs similarity index 97% rename from src/npc/ai/first_cave.rs rename to src/game/npc/ai/first_cave.rs index 1b308a5..1ea62b9 100644 --- a/src/npc/ai/first_cave.rs +++ b/src/game/npc/ai/first_cave.rs @@ -2,10 +2,10 @@ use num_traits::clamp; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n059_eye_door(&mut self, state: &mut SharedGameState, players: [&mut Player; 2]) -> GameResult { diff --git a/src/npc/ai/grasstown.rs b/src/game/npc/ai/grasstown.rs similarity index 98% rename from src/npc/ai/grasstown.rs rename to src/game/npc/ai/grasstown.rs index 5715a4e..834e33f 100644 --- a/src/npc/ai/grasstown.rs +++ b/src/game/npc/ai/grasstown.rs @@ -1,13 +1,13 @@ use num_traits::abs; use num_traits::clamp; -use crate::caret::CaretType; use crate::common::{Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::{NPCList, NPC}; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::{NPC, NPCList}; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n024_power_critter( @@ -834,7 +834,7 @@ impl NPC { && self.action_num != 3 && self.action_counter > 10 && ((self.shock > 0) - || (abs(self.x - player.x) < 0x14000 && abs(self.y - player.y) < 0x8000) && self.rng.range(0..50) == 2) + || (abs(self.x - player.x) < 0x14000 && abs(self.y - player.y) < 0x8000) && self.rng.range(0..50) == 2) { self.direction = if self.x >= player.x { Direction::Left } else { Direction::Right }; self.action_num = 10; @@ -1176,7 +1176,7 @@ impl NPC { && self.action_num != 3 && self.action_counter > 10 && ((self.shock > 0) - || (abs(self.x - player.x) < 0x14000 && abs(self.y - player.y) < 0x8000) && self.rng.range(0..50) == 2) + || (abs(self.x - player.x) < 0x14000 && abs(self.y - player.y) < 0x8000) && self.rng.range(0..50) == 2) { self.direction = if self.x >= player.x { Direction::Left } else { Direction::Right }; self.action_num = 10; @@ -1219,9 +1219,9 @@ impl NPC { let player = self.get_closest_player_mut(players); if self.shock != 0 || (player.x < self.x + 0xc000 - && player.x > self.x - 0xc000 - && player.y < self.y + 0x4000 - && player.y > self.y - 0xc000) + && player.x > self.x - 0xc000 + && player.y < self.y + 0x4000 + && player.y > self.y - 0xc000) { self.action_num = 10; } diff --git a/src/npc/ai/hell.rs b/src/game/npc/ai/hell.rs similarity index 97% rename from src/npc/ai/hell.rs rename to src/game/npc/ai/hell.rs index 6dcd525..7479f89 100644 --- a/src/npc/ai/hell.rs +++ b/src/game/npc/ai/hell.rs @@ -1,11 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::stage::Stage; -use crate::{GameResult, SharedGameState}; +use crate::framework::error::GameResult; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n337_numahachi(&mut self, state: &mut SharedGameState) -> GameResult { @@ -264,7 +265,7 @@ impl NPC { if (player.y > self.y - 0x14000 && player.y < self.y + 0x14000) && ((self.direction == Direction::Left && player.x > self.x - 0x28000 && player.x < self.x) - || (self.direction != Direction::Left && player.x > self.x && player.x < self.x + 0x28000)) + || (self.direction != Direction::Left && player.x > self.x && player.x < self.x + 0x28000)) { self.action_num = 10; } @@ -511,9 +512,9 @@ impl NPC { let player = self.get_closest_player_ref(&players); if self.action_counter > 20 && ((self.direction == Direction::Left && self.x <= player.x + 0x4000) - || (self.direction == Direction::Up && self.y <= player.y + 0x4000) - || (self.direction == Direction::Right && self.x <= player.x - 0x4000) - || (self.direction == Direction::Bottom && self.y <= player.y - 0x4000)) + || (self.direction == Direction::Up && self.y <= player.y + 0x4000) + || (self.direction == Direction::Right && self.x <= player.x - 0x4000) + || (self.direction == Direction::Bottom && self.y <= player.y - 0x4000)) { self.action_num = 10 } diff --git a/src/npc/ai/igor.rs b/src/game/npc/ai/igor.rs similarity index 98% rename from src/npc/ai/igor.rs rename to src/game/npc/ai/igor.rs index 3ddd63c..49db62a 100644 --- a/src/npc/ai/igor.rs +++ b/src/game/npc/ai/igor.rs @@ -1,10 +1,10 @@ -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n083_igor_cutscene(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/intro.rs b/src/game/npc/ai/intro.rs similarity index 96% rename from src/npc/ai/intro.rs rename to src/game/npc/ai/intro.rs index 8adf697..d8ac372 100644 --- a/src/npc/ai/intro.rs +++ b/src/game/npc/ai/intro.rs @@ -1,10 +1,9 @@ -use crate::framework::error::GameResult; - -use crate::caret::CaretType; use crate::common::Direction; -use crate::npc::NPC; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::framework::error::GameResult; +use crate::game::caret::CaretType; +use crate::game::npc::NPC; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n298_intro_doctor(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/last_cave.rs b/src/game/npc/ai/last_cave.rs similarity index 98% rename from src/npc/ai/last_cave.rs rename to src/game/npc/ai/last_cave.rs index 0821fb8..c6df8c0 100644 --- a/src/npc/ai/last_cave.rs +++ b/src/game/npc/ai/last_cave.rs @@ -1,11 +1,11 @@ -use crate::caret::CaretType; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n241_critter_red( diff --git a/src/npc/ai/maze.rs b/src/game/npc/ai/maze.rs similarity index 99% rename from src/npc/ai/maze.rs rename to src/game/npc/ai/maze.rs index a6b1e26..f286f1b 100644 --- a/src/npc/ai/maze.rs +++ b/src/game/npc/ai/maze.rs @@ -1,11 +1,11 @@ -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n147_critter_purple( diff --git a/src/npc/ai/mimiga_village.rs b/src/game/npc/ai/mimiga_village.rs similarity index 99% rename from src/npc/ai/mimiga_village.rs rename to src/game/npc/ai/mimiga_village.rs index 5e93df8..3e6a26f 100644 --- a/src/npc/ai/mimiga_village.rs +++ b/src/game/npc/ai/mimiga_village.rs @@ -4,13 +4,13 @@ use num_traits::{abs, clamp}; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::{Player, TargetPlayer}; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; -use crate::weapon::bullet::BulletManager; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n069_pignon(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/misc.rs b/src/game/npc/ai/misc.rs similarity index 99% rename from src/npc/ai/misc.rs rename to src/game/npc/ai/misc.rs index f1ee666..813d85b 100644 --- a/src/npc/ai/misc.rs +++ b/src/game/npc/ai/misc.rs @@ -1,16 +1,16 @@ use std::hint::unreachable_unchecked; -use crate::caret::CaretType; use crate::common::{Direction, Rect}; use crate::components::flash::Flash; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::{NPCLayer, NPC}; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::{GameDifficulty, SharedGameState}; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::{NPC, NPCLayer}; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::player::Player; +use crate::game::shared_game_state::{GameDifficulty, SharedGameState}; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n000_null(&mut self) -> GameResult { @@ -624,9 +624,9 @@ impl NPC { self.action_counter += 1; if self.action_counter > 10 && (self.flags.hit_left_wall() - || self.flags.hit_right_wall() - || self.flags.hit_bottom_wall() - || self.flags.in_water()) + || self.flags.hit_right_wall() + || self.flags.hit_bottom_wall() + || self.flags.in_water()) { // hit something self.cond.set_alive(false); @@ -2180,11 +2180,11 @@ impl NPC { npc.cond.set_alive(true); npc.x = self.x + if player.equip.has_booster_2_0() { - self.rng.range(-14..14) - } else { - self.rng.range(-11..11) - } * state.tile_size.as_int() - * 0x200; + self.rng.range(-14..14) + } else { + self.rng.range(-11..11) + } * state.tile_size.as_int() + * 0x200; npc.y = player.y - 0x1C000; npc.direction = if self.rng.range(0..10) & 1 != 0 { Direction::Left } else { Direction::Right }; diff --git a/src/npc/ai/misery.rs b/src/game/npc/ai/misery.rs similarity index 99% rename from src/npc/ai/misery.rs rename to src/game/npc/ai/misery.rs index d73b35e..bf1d226 100644 --- a/src/npc/ai/misery.rs +++ b/src/game/npc/ai/misery.rs @@ -2,17 +2,17 @@ use std::hint::unreachable_unchecked; use num_traits::clamp; -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::components::flash::Flash; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n066_misery_bubble(&mut self, state: &mut SharedGameState, npc_list: &NPCList) -> GameResult { @@ -845,10 +845,10 @@ impl NPC { if let Some(parent) = self.get_parent_ref_mut(npc_list) { self.x = parent.x + self.action_counter as i32 * ((self.action_counter2 as f64 * CDEG_RAD).cos() * -512.0) as i32 - / 4; + / 4; self.y = parent.y + self.action_counter as i32 * ((self.action_counter2 as f64 * CDEG_RAD).sin() * -512.0) as i32 - / 4; + / 4; if parent.action_num == 151 { self.action_num = 10; diff --git a/src/game/npc/ai/mod.rs b/src/game/npc/ai/mod.rs new file mode 100644 index 0000000..0262065 --- /dev/null +++ b/src/game/npc/ai/mod.rs @@ -0,0 +1,28 @@ +pub(crate) mod balcony; +pub(crate) mod balrog; +pub(crate) mod booster; +pub(crate) mod chaco; +pub(crate) mod characters; +pub(crate) mod curly; +pub(crate) mod doctor; +pub(crate) mod egg_corridor; +pub(crate) mod first_cave; +pub(crate) mod grasstown; +pub(crate) mod hell; +pub(crate) mod igor; +pub(crate) mod intro; +pub(crate) mod last_cave; +pub(crate) mod maze; +pub(crate) mod mimiga_village; +pub(crate) mod misc; +pub(crate) mod misery; +pub(crate) mod outer_wall; +pub(crate) mod pickups; +pub(crate) mod plantation; +pub(crate) mod quote; +pub(crate) mod sand_zone; +pub(crate) mod santa; +pub(crate) mod sue; +pub(crate) mod toroko; +pub(crate) mod weapon_trail; +pub(crate) mod wind_fortress; diff --git a/src/npc/ai/outer_wall.rs b/src/game/npc/ai/outer_wall.rs similarity index 98% rename from src/npc/ai/outer_wall.rs rename to src/game/npc/ai/outer_wall.rs index eb7cfbd..82b0216 100644 --- a/src/npc/ai/outer_wall.rs +++ b/src/game/npc/ai/outer_wall.rs @@ -2,11 +2,11 @@ use num_traits::abs; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n212_sky_dragon( diff --git a/src/npc/ai/pickups.rs b/src/game/npc/ai/pickups.rs similarity index 98% rename from src/npc/ai/pickups.rs rename to src/game/npc/ai/pickups.rs index 571b627..917cefc 100644 --- a/src/npc/ai/pickups.rs +++ b/src/game/npc/ai/pickups.rs @@ -1,9 +1,9 @@ use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::NPC; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::{Stage, BackgroundType}; +use crate::game::npc::NPC; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::{BackgroundType, Stage}; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n001_experience(&mut self, state: &mut SharedGameState, stage: &mut Stage) -> GameResult { diff --git a/src/npc/ai/plantation.rs b/src/game/npc/ai/plantation.rs similarity index 99% rename from src/npc/ai/plantation.rs rename to src/game/npc/ai/plantation.rs index cb7ab47..f68e81f 100644 --- a/src/npc/ai/plantation.rs +++ b/src/game/npc/ai/plantation.rs @@ -1,11 +1,11 @@ -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n220_shovel_brigade(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/ai/quote.rs b/src/game/npc/ai/quote.rs similarity index 98% rename from src/npc/ai/quote.rs rename to src/game/npc/ai/quote.rs index 43bcf36..815a396 100644 --- a/src/npc/ai/quote.rs +++ b/src/game/npc/ai/quote.rs @@ -1,11 +1,10 @@ -use crate::framework::error::GameResult; - use crate::common::Direction; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::framework::error::GameResult; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub fn tick_n111_quote_teleport_out( diff --git a/src/npc/ai/sand_zone.rs b/src/game/npc/ai/sand_zone.rs similarity index 99% rename from src/npc/ai/sand_zone.rs rename to src/game/npc/ai/sand_zone.rs index faa0e83..942c613 100644 --- a/src/npc/ai/sand_zone.rs +++ b/src/game/npc/ai/sand_zone.rs @@ -1,14 +1,14 @@ use num_traits::{abs, clamp}; -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n044_polish(&mut self, state: &mut SharedGameState, npc_list: &NPCList) -> GameResult { diff --git a/src/npc/ai/santa.rs b/src/game/npc/ai/santa.rs similarity index 95% rename from src/npc/ai/santa.rs rename to src/game/npc/ai/santa.rs index b860e4c..1dbfca6 100644 --- a/src/npc/ai/santa.rs +++ b/src/game/npc/ai/santa.rs @@ -2,10 +2,10 @@ use num_traits::abs; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n040_santa(&mut self, state: &mut SharedGameState, players: [&mut Player; 2]) -> GameResult { diff --git a/src/npc/ai/sue.rs b/src/game/npc/ai/sue.rs similarity index 98% rename from src/npc/ai/sue.rs rename to src/game/npc/ai/sue.rs index ad5770a..2eee2df 100644 --- a/src/npc/ai/sue.rs +++ b/src/game/npc/ai/sue.rs @@ -1,12 +1,12 @@ use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub fn tick_n042_sue( diff --git a/src/npc/ai/toroko.rs b/src/game/npc/ai/toroko.rs similarity index 99% rename from src/npc/ai/toroko.rs rename to src/game/npc/ai/toroko.rs index cb52d5c..86fac6f 100644 --- a/src/npc/ai/toroko.rs +++ b/src/game/npc/ai/toroko.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n060_toroko(&mut self, state: &mut SharedGameState, players: [&mut Player; 2]) -> GameResult { diff --git a/src/npc/ai/weapon_trail.rs b/src/game/npc/ai/weapon_trail.rs similarity index 94% rename from src/npc/ai/weapon_trail.rs rename to src/game/npc/ai/weapon_trail.rs index 46e2aa3..24b33b9 100644 --- a/src/npc/ai/weapon_trail.rs +++ b/src/game/npc/ai/weapon_trail.rs @@ -1,11 +1,10 @@ -use crate::framework::error::GameResult; - -use crate::npc::NPC; -use crate::shared_game_state::SharedGameState; use crate::common::Direction; +use crate::framework::error::GameResult; +use crate::game::npc::NPC; +use crate::game::shared_game_state::SharedGameState; impl NPC { - pub(crate) fn tick_n127_machine_gun_trail_l2(&mut self, state: &mut SharedGameState ) -> GameResult { + pub(crate) fn tick_n127_machine_gun_trail_l2(&mut self, state: &mut SharedGameState) -> GameResult { self.anim_counter += 1; if self.anim_counter > 0 { self.anim_counter = 0; @@ -30,7 +29,7 @@ impl NPC { Ok(()) } - pub(crate) fn tick_n128_machine_gun_trail_l3(&mut self, state: &mut SharedGameState ) -> GameResult { + pub(crate) fn tick_n128_machine_gun_trail_l3(&mut self, state: &mut SharedGameState) -> GameResult { self.anim_counter += 1; if self.anim_counter > 0 { self.anim_counter = 0; diff --git a/src/npc/ai/wind_fortress.rs b/src/game/npc/ai/wind_fortress.rs similarity index 99% rename from src/npc/ai/wind_fortress.rs rename to src/game/npc/ai/wind_fortress.rs index a0c4153..7965fd5 100644 --- a/src/npc/ai/wind_fortress.rs +++ b/src/game/npc/ai/wind_fortress.rs @@ -1,11 +1,11 @@ -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { // Gaudi from room 2 diff --git a/src/npc/boss/balfrog.rs b/src/game/npc/boss/balfrog.rs similarity index 98% rename from src/npc/boss/balfrog.rs rename to src/game/npc/boss/balfrog.rs index bc5c461..93ce7d3 100644 --- a/src/npc/boss/balfrog.rs +++ b/src/game/npc/boss/balfrog.rs @@ -1,13 +1,12 @@ +use crate::common::{CDEG_RAD, Direction, Rect}; use crate::framework::error::GameResult; - -use crate::caret::CaretType; -use crate::common::{Direction, Rect, CDEG_RAD}; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n108_balfrog_projectile(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/boss/ballos.rs b/src/game/npc/boss/ballos.rs similarity index 99% rename from src/npc/boss/ballos.rs rename to src/game/npc/boss/ballos.rs index fe806b8..2775f75 100644 --- a/src/npc/boss/ballos.rs +++ b/src/game/npc/boss/ballos.rs @@ -1,14 +1,14 @@ -use crate::caret::CaretType; -use crate::common::{Direction, Rect, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect}; use crate::components::flash::Flash; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n331_ballos_bone_projectile(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/boss/core.rs b/src/game/npc/boss/core.rs similarity index 98% rename from src/npc/boss/core.rs rename to src/game/npc/boss/core.rs index 9305410..2e4be32 100644 --- a/src/npc/boss/core.rs +++ b/src/game/npc/boss/core.rs @@ -1,13 +1,13 @@ -use crate::caret::CaretType; -use crate::common::{Direction, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction}; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n178_core_blade_projectile(&mut self, state: &mut SharedGameState) -> GameResult { @@ -93,7 +93,7 @@ impl BossNPC { let mut flag = false; // i will refactor that one day #[allow(mutable_transmutes)] - let flash_counter: &mut u16 = unsafe { std::mem::transmute(&self.parts[19].action_counter3) }; + let flash_counter: &mut u16 = unsafe { std::mem::transmute(&self.parts[19].action_counter3) }; match self.parts[0].action_num { 0 => { diff --git a/src/npc/boss/heavy_press.rs b/src/game/npc/boss/heavy_press.rs similarity index 98% rename from src/npc/boss/heavy_press.rs rename to src/game/npc/boss/heavy_press.rs index d4e4fa9..65287cf 100644 --- a/src/npc/boss/heavy_press.rs +++ b/src/game/npc/boss/heavy_press.rs @@ -1,11 +1,11 @@ use crate::common::{Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n325_heavy_press_lightning( diff --git a/src/npc/boss/ironhead.rs b/src/game/npc/boss/ironhead.rs similarity index 98% rename from src/npc/boss/ironhead.rs rename to src/game/npc/boss/ironhead.rs index 89e48ef..db8bcdd 100644 --- a/src/npc/boss/ironhead.rs +++ b/src/game/npc/boss/ironhead.rs @@ -1,11 +1,11 @@ use crate::common::{Direction, Rect}; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n196_ironhead_wall(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/boss/mod.rs b/src/game/npc/boss/mod.rs similarity index 92% rename from src/npc/boss/mod.rs rename to src/game/npc/boss/mod.rs index 6e62519..20f86e3 100644 --- a/src/npc/boss/mod.rs +++ b/src/game/npc/boss/mod.rs @@ -1,18 +1,18 @@ -use std::mem::{transmute, MaybeUninit}; +use std::mem::{MaybeUninit, transmute}; use std::ops::Deref; -use crate::common::{interpolate_fix9_scale, Direction}; +use crate::common::{Direction, interpolate_fix9_scale}; use crate::components::flash::Flash; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; -use crate::weapon::bullet::BulletManager; +use crate::game::frame::Frame; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::game::weapon::bullet::BulletManager; pub mod balfrog; pub mod ballos; diff --git a/src/npc/boss/monster_x.rs b/src/game/npc/boss/monster_x.rs similarity index 99% rename from src/npc/boss/monster_x.rs rename to src/game/npc/boss/monster_x.rs index 6d9112c..564c869 100644 --- a/src/npc/boss/monster_x.rs +++ b/src/game/npc/boss/monster_x.rs @@ -1,15 +1,15 @@ use num_traits::{abs, clamp}; -use crate::caret::CaretType; -use crate::common::{Direction, Rect, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect}; use crate::components::flash::Flash; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n158_fish_missile( diff --git a/src/npc/boss/omega.rs b/src/game/npc/boss/omega.rs similarity index 98% rename from src/npc/boss/omega.rs rename to src/game/npc/boss/omega.rs index 8d21e1b..1df9175 100644 --- a/src/npc/boss/omega.rs +++ b/src/game/npc/boss/omega.rs @@ -1,14 +1,14 @@ -use crate::caret::CaretType; use crate::common::{Direction, Rect}; use crate::components::flash::Flash; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n048_omega_projectiles(&mut self, state: &mut SharedGameState) -> GameResult { diff --git a/src/npc/boss/sisters.rs b/src/game/npc/boss/sisters.rs similarity index 98% rename from src/npc/boss/sisters.rs rename to src/game/npc/boss/sisters.rs index d5ac522..81c67cc 100644 --- a/src/npc/boss/sisters.rs +++ b/src/game/npc/boss/sisters.rs @@ -1,11 +1,11 @@ -use crate::common::{Direction, Rect, SliceExt, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect, SliceExt}; use crate::components::flash::Flash; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::SharedGameState; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::util::rng::RNG; impl BossNPC { pub(crate) fn tick_b06_sisters( diff --git a/src/npc/boss/undead_core.rs b/src/game/npc/boss/undead_core.rs similarity index 99% rename from src/npc/boss/undead_core.rs rename to src/game/npc/boss/undead_core.rs index fbe9328..bdd9a19 100644 --- a/src/npc/boss/undead_core.rs +++ b/src/game/npc/boss/undead_core.rs @@ -1,14 +1,15 @@ use std::hint::unreachable_unchecked; -use crate::common::{Direction, Rect, SliceExt, CDEG_RAD}; +use crate::common::{CDEG_RAD, Direction, Rect, SliceExt}; use crate::components::flash::Flash; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::stage::Stage; -use crate::{GameResult, SharedGameState}; +use crate::framework::error::GameResult; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::Stage; +use crate::util::rng::RNG; impl NPC { pub(crate) fn tick_n282_mini_undead_core_active( diff --git a/src/npc/list.rs b/src/game/npc/list.rs similarity index 99% rename from src/npc/list.rs rename to src/game/npc/list.rs index 91618e6..9c21b3d 100644 --- a/src/npc/list.rs +++ b/src/game/npc/list.rs @@ -1,9 +1,8 @@ use std::cell::{Cell, UnsafeCell}; -use std::mem::{transmute, MaybeUninit}; +use std::mem::{MaybeUninit, transmute}; use crate::framework::error::{GameError, GameResult}; - -use crate::npc::NPC; +use crate::game::npc::NPC; /// Maximum capacity of NPCList const NPC_LIST_MAX_CAP: usize = 512; diff --git a/src/npc/mod.rs b/src/game/npc/mod.rs similarity index 98% rename from src/npc/mod.rs rename to src/game/npc/mod.rs index 8cb7839..9c23c7b 100644 --- a/src/npc/mod.rs +++ b/src/game/npc/mod.rs @@ -4,26 +4,26 @@ use std::io::Cursor; use std::ops::Deref; use std::rc::Rc; -use byteorder::{ReadBytesExt, LE}; +use byteorder::{LE, ReadBytesExt}; use crate::bitfield; +use crate::common::{Condition, interpolate_fix9_scale, Rect}; use crate::common::Direction; use crate::common::Flag; -use crate::common::{interpolate_fix9_scale, Condition, Rect}; use crate::components::flash::Flash; use crate::components::number_popup::NumberPopup; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::physics::PhysicalEntity; -use crate::player::Player; -use crate::rng::Xoroshiro32PlusPlus; -use crate::shared_game_state::SharedGameState; -use crate::stage::{Stage, StageTexturePaths}; -use crate::weapon::bullet::BulletManager; +use crate::game::frame::Frame; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::physics::PhysicalEntity; +use crate::game::player::Player; +use crate::game::shared_game_state::SharedGameState; +use crate::game::stage::{Stage, StageTexturePaths}; +use crate::game::weapon::bullet::BulletManager; +use crate::util::rng::Xoroshiro32PlusPlus; pub mod ai; pub mod boss; @@ -242,12 +242,12 @@ impl GameEntity<([&mut Player; 2], &NPCList, &mut Stage, &mut BulletManager, &mu &mut BossNPC, ), ) -> GameResult { - #[allow(unused_assignments)] - let mut npc_hook_ran = false; + #[allow(unused_mut, unused_assignments)] + let mut npc_hook_ran = false; #[cfg(feature = "scripting-lua")] - { - npc_hook_ran = state.lua.try_run_npc_hook(self.id, self.npc_type); - } + { + npc_hook_ran = state.lua.try_run_npc_hook(self.id, self.npc_type); + } match self.npc_type { _ if npc_hook_ran => Ok(()), @@ -622,13 +622,7 @@ impl GameEntity<([&mut Player; 2], &NPCList, &mut Stage, &mut BulletManager, &mu 368 => self.tick_n368_gclone(state, players, npc_list), 369 => self.tick_n369_gclone_curly_clone(state, players, npc_list), 370 => self.tick_n370_second_quote(state, players, npc_list), - _ => { - #[cfg(feature = "hooks")] - { - crate::hooks::run_npc_hook(self, state, players, npc_list, stage, bullet_manager); - } - Ok(()) - } + _ => Ok(()), }?; self.popup.x = self.x; diff --git a/src/npc/utils.rs b/src/game/npc/utils.rs similarity index 95% rename from src/npc/utils.rs rename to src/game/npc/utils.rs index 2603f87..c9acf0d 100644 --- a/src/npc/utils.rs +++ b/src/game/npc/utils.rs @@ -1,16 +1,16 @@ ///! Various utility functions for NPC-related objects use num_traits::abs; -use crate::caret::CaretType; use crate::common::{Condition, Direction, Flag, Rect}; use crate::components::number_popup::NumberPopup; -use crate::map::NPCData; -use crate::npc::list::NPCList; -use crate::npc::{NPCFlag, NPCLayer, NPCTable, NPC}; -use crate::player::Player; -use crate::rng::{Xoroshiro32PlusPlus, RNG}; -use crate::shared_game_state::{SharedGameState, TileSize}; -use crate::weapon::bullet::Bullet; +use crate::game::caret::CaretType; +use crate::game::map::NPCData; +use crate::game::npc::{NPC, NPCFlag, NPCLayer, NPCTable}; +use crate::game::npc::list::NPCList; +use crate::game::player::Player; +use crate::game::shared_game_state::{SharedGameState, TileSize}; +use crate::game::weapon::bullet::Bullet; +use crate::util::rng::{RNG, Xoroshiro32PlusPlus}; const MAX_FALL_SPEED: i32 = 0x5FF; @@ -185,10 +185,10 @@ impl NPC { && (self.y - self.hit_bounds.top as i32) < (bullet.y + bullet.enemy_hit_height as i32) && (self.y + self.hit_bounds.bottom as i32) > (bullet.y - bullet.enemy_hit_height as i32)) || (self.npc_flags.invulnerable() - && (self.x - self.hit_bounds.right as i32) < (bullet.x + bullet.hit_bounds.right as i32) - && (self.x + self.hit_bounds.right as i32) > (bullet.x - bullet.hit_bounds.left as i32) - && (self.y - self.hit_bounds.top as i32) < (bullet.y + bullet.hit_bounds.bottom as i32) - && (self.y + self.hit_bounds.bottom as i32) > (bullet.y - bullet.hit_bounds.top as i32)) + && (self.x - self.hit_bounds.right as i32) < (bullet.x + bullet.hit_bounds.right as i32) + && (self.x + self.hit_bounds.right as i32) > (bullet.x - bullet.hit_bounds.left as i32) + && (self.y - self.hit_bounds.top as i32) < (bullet.y + bullet.hit_bounds.bottom as i32) + && (self.y + self.hit_bounds.bottom as i32) > (bullet.y - bullet.hit_bounds.top as i32)) } /// Creates experience drop for this NPC. diff --git a/src/physics.rs b/src/game/physics.rs similarity index 97% rename from src/physics.rs rename to src/game/physics.rs index 93993cb..0c12fb7 100644 --- a/src/physics.rs +++ b/src/game/physics.rs @@ -1,8 +1,8 @@ -use crate::caret::CaretType; use crate::common::{Condition, Direction, Flag, Rect}; -use crate::npc::list::NPCList; -use crate::shared_game_state::{SharedGameState, TileSize}; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::shared_game_state::{SharedGameState, TileSize}; +use crate::game::stage::Stage; // -3 -2 -1 0 1 2 3 4 // +------------------------ @@ -261,7 +261,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() - self.hit_bounds().top as i32) - < (y * tile_size) - (self.x() - x * tile_size) / 2 + quarter_tile_size + < (y * tile_size) - (self.x() - x * tile_size) / 2 + quarter_tile_size && (self.y() + self.hit_bounds().bottom as i32) > (y * 2 - 1) * half_tile_size { self.set_y( @@ -302,7 +302,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() - self.hit_bounds().top as i32) - < (y * tile_size) - (self.x() - x * tile_size) / 2 - quarter_tile_size + < (y * tile_size) - (self.x() - x * tile_size) / 2 - quarter_tile_size && (self.y() + self.hit_bounds().bottom as i32) > (y * 2 - 1) * half_tile_size { self.set_y( @@ -343,7 +343,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() - self.hit_bounds().top as i32) - < (y * tile_size) + (self.x() - x * tile_size) / 2 - quarter_tile_size + < (y * tile_size) + (self.x() - x * tile_size) / 2 - quarter_tile_size && (self.y() + self.hit_bounds().bottom as i32) > (y * 2 - 1) * half_tile_size { self.set_y( @@ -384,7 +384,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() - self.hit_bounds().top as i32) - < (y * tile_size) + (self.x() - x * tile_size) / 2 + quarter_tile_size + < (y * tile_size) + (self.x() - x * tile_size) / 2 + quarter_tile_size && (self.y() + self.hit_bounds().bottom as i32) > (y * 2 - 1) * half_tile_size { self.set_y( @@ -427,7 +427,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) + (self.x() - x * tile_size) / 2 - quarter_tile_size + > (y * tile_size) + (self.x() - x * tile_size) / 2 - quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( @@ -460,7 +460,7 @@ pub trait PhysicalEntity { if (self.x() < (x * 2 + 1) * half_tile_size) && (self.x() > (x * 2 - 1) * half_tile_size) && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) + (self.x() - x * tile_size) / 2 + quarter_tile_size + > (y * tile_size) + (self.x() - x * tile_size) / 2 + quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( @@ -492,7 +492,7 @@ pub trait PhysicalEntity { if (self.x() < (x * 2 + 1) * half_tile_size) && (self.x() > (x * 2 - 1) * half_tile_size) && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) - (self.x() - x * tile_size) / 2 + quarter_tile_size + > (y * tile_size) - (self.x() - x * tile_size) / 2 + quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( @@ -524,7 +524,7 @@ pub trait PhysicalEntity { if (self.x() < (x * 2 + 1) * half_tile_size) && (self.x() > (x * 2 - 1) * half_tile_size) && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) - (self.x() - x * tile_size) / 2 - quarter_tile_size + > (y * tile_size) - (self.x() - x * tile_size) / 2 - quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( @@ -630,7 +630,7 @@ pub trait PhysicalEntity { if self.x() < (x * 2 + 1) * half_tile_size && self.x() > (x * 2 - 1) * half_tile_size && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) + (self.x() - x * tile_size) - quarter_tile_size + > (y * tile_size) + (self.x() - x * tile_size) - quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( @@ -661,7 +661,7 @@ pub trait PhysicalEntity { if (self.x() < (x * 2 + 1) * half_tile_size) && (self.x() > (x * 2 - 1) * half_tile_size) && (self.y() + self.hit_bounds().bottom as i32) - > (y * tile_size) - (self.x() - x * tile_size) - quarter_tile_size + > (y * tile_size) - (self.x() - x * tile_size) - quarter_tile_size && (self.y() - self.hit_bounds().top as i32) < (y * 2 + 1) * half_tile_size { self.set_y( diff --git a/src/player/mod.rs b/src/game/player/mod.rs similarity index 97% rename from src/player/mod.rs rename to src/game/player/mod.rs index 1da9862..f3953d4 100644 --- a/src/player/mod.rs +++ b/src/game/player/mod.rs @@ -3,21 +3,21 @@ use std::clone::Clone; use num_derive::FromPrimitive; use num_traits::clamp; -use crate::caret::CaretType; -use crate::common::{interpolate_fix9_scale, Condition, Direction, Equipment, Flag, Rect}; +use crate::common::{Condition, Direction, Equipment, Flag, interpolate_fix9_scale, Rect}; use crate::components::number_popup::NumberPopup; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::caret::CaretType; +use crate::game::frame::Frame; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::player::skin::{PlayerAnimationState, PlayerAppearanceState, PlayerSkin}; +use crate::game::player::skin::basic::BasicPlayerSkin; +use crate::game::shared_game_state::SharedGameState; use crate::input::dummy_player_controller::DummyPlayerController; use crate::input::player_controller::PlayerController; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::skin::basic::BasicPlayerSkin; -use crate::player::skin::{PlayerAnimationState, PlayerAppearanceState, PlayerSkin}; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; +use crate::util::rng::RNG; mod player_hit; pub mod skin; @@ -402,10 +402,10 @@ impl Player { // stop interacting when moved if state.control_flags.control_enabled() && (self.controller.move_left() - || self.controller.move_right() - || self.controller.move_up() - || self.controller.jump() - || self.controller.shoot()) + || self.controller.move_right() + || self.controller.move_up() + || self.controller.jump() + || self.controller.shoot()) { self.cond.set_interacted(false); } @@ -524,8 +524,8 @@ impl Player { if (self.flags.hit_bottom_wall() && self.flags.hit_right_higher_half() && self.vel_x < 0) || (self.flags.hit_bottom_wall() && self.flags.hit_left_higher_half() && self.vel_x > 0) || (self.flags.hit_bottom_wall() - && self.flags.hit_left_lower_half() - && self.flags.hit_right_lower_half()) + && self.flags.hit_left_lower_half() + && self.flags.hit_right_lower_half()) { self.vel_y = 0x400; // 2.0fix9 } @@ -533,9 +533,9 @@ impl Player { let max_move = if self.flags.in_water() && !(self.flags.force_left() - || self.flags.force_up() - || self.flags.force_right() - || self.flags.force_down()) + || self.flags.force_up() + || self.flags.force_right() + || self.flags.force_down()) { state.constants.player.water_physics.max_move } else { diff --git a/src/player/player_hit.rs b/src/game/player/player_hit.rs similarity index 97% rename from src/player/player_hit.rs rename to src/game/player/player_hit.rs index c03b458..84df9e6 100644 --- a/src/player/player_hit.rs +++ b/src/game/player/player_hit.rs @@ -2,16 +2,16 @@ use std::borrow::Borrow; use num_traits::abs; -use crate::caret::CaretType; use crate::common::{Condition, Direction, Flag, Rect}; -use crate::inventory::Inventory; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::physics::PhysicalEntity; -use crate::player::{ControlMode, Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::WeaponType; +use crate::game::caret::CaretType; +use crate::game::inventory::Inventory; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::physics::PhysicalEntity; +use crate::game::player::{ControlMode, Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::WeaponType; impl PhysicalEntity for Player { #[inline(always)] diff --git a/src/player/player_list.rs b/src/game/player/player_list.rs similarity index 100% rename from src/player/player_list.rs rename to src/game/player/player_list.rs diff --git a/src/player/skin/basic.rs b/src/game/player/skin/basic.rs similarity index 93% rename from src/player/skin/basic.rs rename to src/game/player/skin/basic.rs index ef0d8f9..944dd94 100644 --- a/src/player/skin/basic.rs +++ b/src/game/player/skin/basic.rs @@ -4,8 +4,8 @@ use crate::common::{Color, Direction, Rect}; use crate::framework::context::Context; use crate::framework::filesystem; use crate::framework::filesystem::File; -use crate::player::skin::{PlayerAnimationState, PlayerAppearanceState, PlayerSkin}; -use crate::shared_game_state::SharedGameState; +use crate::game::player::skin::{PlayerAnimationState, PlayerAppearanceState, PlayerSkin}; +use crate::game::shared_game_state::SharedGameState; #[derive(Default, Clone, serde_derive::Deserialize)] #[serde(rename_all = "camelCase")] @@ -152,14 +152,14 @@ impl PlayerSkin for BasicPlayerSkin { let y_offset = if direction == Direction::Left { 0 } else { self.metadata.frame_size_height } + match self.appearance { - PlayerAppearanceState::Default => self.get_y_offset_by(0), - PlayerAppearanceState::MimigaMask => { - self.get_y_offset_by(self.metadata.frame_size_height.saturating_mul(2)) - } - PlayerAppearanceState::Custom(i) => { - self.get_y_offset_by((i as u16).saturating_mul(self.metadata.frame_size_height)) - } - }; + PlayerAppearanceState::Default => self.get_y_offset_by(0), + PlayerAppearanceState::MimigaMask => { + self.get_y_offset_by(self.metadata.frame_size_height.saturating_mul(2)) + } + PlayerAppearanceState::Custom(i) => { + self.get_y_offset_by((i as u16).saturating_mul(self.metadata.frame_size_height)) + } + }; Rect::new_size( frame_id.saturating_mul(self.metadata.frame_size_width), diff --git a/src/player/skin/mod.rs b/src/game/player/skin/mod.rs similarity index 98% rename from src/player/skin/mod.rs rename to src/game/player/skin/mod.rs index 9e85dfd..82b5440 100644 --- a/src/player/skin/mod.rs +++ b/src/game/player/skin/mod.rs @@ -1,6 +1,6 @@ use crate::bitfield; use crate::common::{Color, Direction, Rect}; -use crate::shared_game_state::SharedGameState; +use crate::game::shared_game_state::SharedGameState; pub mod basic; diff --git a/src/profile.rs b/src/game/profile.rs similarity index 95% rename from src/profile.rs rename to src/game/profile.rs index ae15e0d..b1c7448 100644 --- a/src/profile.rs +++ b/src/game/profile.rs @@ -1,16 +1,16 @@ use std::io; -use byteorder::{ReadBytesExt, WriteBytesExt, BE, LE}; +use byteorder::{BE, LE, ReadBytesExt, WriteBytesExt}; use num_traits::{clamp, FromPrimitive}; -use crate::common::{get_timestamp, Direction, FadeState}; +use crate::common::{Direction, FadeState, get_timestamp}; use crate::framework::context::Context; use crate::framework::error::GameError::ResourceLoadError; use crate::framework::error::GameResult; -use crate::player::ControlMode; +use crate::game::player::ControlMode; +use crate::game::shared_game_state::{GameDifficulty, SharedGameState}; +use crate::game::weapon::{WeaponLevel, WeaponType}; use crate::scene::game_scene::GameScene; -use crate::shared_game_state::{GameDifficulty, SharedGameState}; -use crate::weapon::{WeaponLevel, WeaponType}; pub struct WeaponData { pub weapon_id: u32, @@ -219,25 +219,14 @@ impl GameProfile { let mut map_flags = [0u8; 128]; for (idx, map_flag) in state.map_flags.iter().enumerate() { if let Some(out) = map_flags.get_mut(idx) { - *out = if *map_flag { 1 } else { 0 }; + *out = if map_flag { 1 } else { 0 }; } else { break; } } - let mut bidx = 0; let mut flags = [0u8; 1000]; - for bits in state.game_flags.as_raw_slice() { - let bytes = bits.to_le_bytes(); - for b in bytes { - if let Some(out) = flags.get_mut(bidx) { - *out = b; - } else { - break; - } - bidx += 1; - } - } + state.game_flags.copy_to_slice(&mut flags); let timestamp = get_timestamp(); let difficulty = state.difficulty as u8; diff --git a/src/scripting/lua/boot.lua b/src/game/scripting/lua/boot.lua similarity index 100% rename from src/scripting/lua/boot.lua rename to src/game/scripting/lua/boot.lua diff --git a/src/scripting/lua/doukutsu.d.ts b/src/game/scripting/lua/doukutsu.d.ts similarity index 99% rename from src/scripting/lua/doukutsu.d.ts rename to src/game/scripting/lua/doukutsu.d.ts index 3cc5c68..fa96f0c 100644 --- a/src/scripting/lua/doukutsu.d.ts +++ b/src/game/scripting/lua/doukutsu.d.ts @@ -93,8 +93,11 @@ declare interface NPC { rawDirection: number; hitCeiling(): boolean; + hitFloor(): boolean; + hitLeftWall(): boolean; + hitRightWall(): boolean; /** @@ -207,7 +210,7 @@ declare namespace doukutsu { * Helper property for doukutsu-rs specific APIs. */ const rs: DoukutsuRSApi; - + /** * The number of current stage, read-only. Set to -1 if in menu. */ diff --git a/src/scripting/lua/doukutsu.rs b/src/game/scripting/lua/doukutsu.rs similarity index 98% rename from src/scripting/lua/doukutsu.rs rename to src/game/scripting/lua/doukutsu.rs index 0b5cb2c..24d4f6c 100644 --- a/src/scripting/lua/doukutsu.rs +++ b/src/game/scripting/lua/doukutsu.rs @@ -1,15 +1,15 @@ use std::io::Read; +use lua_ffi::{c_int, LuaObject, State}; use lua_ffi::c_str; use lua_ffi::ffi::luaL_Reg; use lua_ffi::lua_method; -use lua_ffi::{c_int, LuaObject, State}; use crate::common::{Direction, Rect}; use crate::framework::filesystem; -use crate::rng::RNG; +use crate::game::scripting::lua::{check_status, DRS_RUNTIME_GLOBAL, LuaScriptingState}; use crate::scene::game_scene::LightingMode; -use crate::scripting::lua::{check_status, LuaScriptingState, DRS_RUNTIME_GLOBAL}; +use crate::util::rng::RNG; pub struct Doukutsu { pub ptr: *mut LuaScriptingState, @@ -344,7 +344,7 @@ impl Doukutsu { 0x203 => { // set anim rect if let (Some(l), Some(t), Some(r), Some(b)) = - (state.to_int(4), state.to_int(5), state.to_int(6), state.to_int(7)) + (state.to_int(4), state.to_int(5), state.to_int(6), state.to_int(7)) { npc.anim_rect = Rect { left: l as u16, top: t as u16, right: r as u16, bottom: b as u16 }; } else { diff --git a/src/scripting/lua/mod.rs b/src/game/scripting/lua/mod.rs similarity index 95% rename from src/scripting/lua/mod.rs rename to src/game/scripting/lua/mod.rs index ae1f29c..0b64c68 100644 --- a/src/scripting/lua/mod.rs +++ b/src/game/scripting/lua/mod.rs @@ -1,19 +1,19 @@ use std::io::Read; use std::ptr::null_mut; -use lua_ffi::lua_fn; -use lua_ffi::ffi::lua_State; -use lua_ffi::types::LuaValue; use lua_ffi::{c_int, State, ThreadStatus}; +use lua_ffi::ffi::lua_State; +use lua_ffi::lua_fn; +use lua_ffi::types::LuaValue; use crate::common::Rect; use crate::framework::context::Context; use crate::framework::error::{GameError, GameResult}; use crate::framework::filesystem; use crate::framework::filesystem::File; +use crate::game::scripting::lua::doukutsu::Doukutsu; +use crate::game::shared_game_state::SharedGameState; use crate::scene::game_scene::GameScene; -use crate::scripting::lua::doukutsu::Doukutsu; -use crate::shared_game_state::SharedGameState; mod doukutsu; mod scene; @@ -25,12 +25,12 @@ pub struct LuaScriptingState { game_scene: *mut GameScene, } -pub(in crate::scripting) static DRS_API_GLOBAL: &str = "__doukutsu_rs"; -pub(in crate::scripting) static DRS_RUNTIME_GLOBAL: &str = "__doukutsu_rs_runtime_dont_touch"; +pub(crate) static DRS_API_GLOBAL: &str = "__doukutsu_rs"; +pub(crate) static DRS_RUNTIME_GLOBAL: &str = "__doukutsu_rs_runtime_dont_touch"; static BOOT_SCRIPT: &str = include_str!("boot.lua"); -pub(in crate::scripting) fn check_status(status: ThreadStatus, state: &mut State) -> GameResult { +pub(crate) fn check_status(status: ThreadStatus, state: &mut State) -> GameResult { match status { ThreadStatus::Ok | ThreadStatus::Yield => { return Ok(()); diff --git a/src/scripting/lua/scene.rs b/src/game/scripting/lua/scene.rs similarity index 94% rename from src/scripting/lua/scene.rs rename to src/game/scripting/lua/scene.rs index c2831a6..d81add5 100644 --- a/src/scripting/lua/scene.rs +++ b/src/game/scripting/lua/scene.rs @@ -1,10 +1,10 @@ +use lua_ffi::{c_int, LuaObject, State}; use lua_ffi::c_str; use lua_ffi::ffi::luaL_Reg; use lua_ffi::lua_method; -use lua_ffi::{c_int, LuaObject, State}; +use crate::game::scripting::lua::{DRS_RUNTIME_GLOBAL, LuaScriptingState}; use crate::scene::game_scene::GameScene; -use crate::scripting::lua::{LuaScriptingState, DRS_RUNTIME_GLOBAL}; pub struct LuaGameScene { valid_reference: bool, diff --git a/src/game/scripting/lua/tsconfig.json b/src/game/scripting/lua/tsconfig.json new file mode 100644 index 0000000..9666727 --- /dev/null +++ b/src/game/scripting/lua/tsconfig.json @@ -0,0 +1,23 @@ +{ + "files": [ + "doukutsu.d.ts" + ], + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "lib": [ + "es2018" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "./", + "typeRoots": [ + "./" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/src/scripting/mod.rs b/src/game/scripting/mod.rs similarity index 100% rename from src/scripting/mod.rs rename to src/game/scripting/mod.rs diff --git a/src/scripting/tsc/bytecode_utils.rs b/src/game/scripting/tsc/bytecode_utils.rs similarity index 91% rename from src/scripting/tsc/bytecode_utils.rs rename to src/game/scripting/tsc/bytecode_utils.rs index 01e6434..6046ea5 100644 --- a/src/scripting/tsc/bytecode_utils.rs +++ b/src/game/scripting/tsc/bytecode_utils.rs @@ -1,9 +1,9 @@ use std::io::{Cursor, Read}; -use crate::encoding::{read_cur_shift_jis, read_cur_wtf8}; use crate::framework::error::GameError::ParseError; use crate::framework::error::GameResult; -use crate::scripting::tsc::text_script::TextScriptEncoding; +use crate::game::scripting::tsc::text_script::TextScriptEncoding; +use crate::util::encoding::{read_cur_shift_jis, read_cur_wtf8}; pub fn put_varint(val: i32, out: &mut Vec) { let mut x = ((val as u32) >> 31) ^ ((val as u32) << 1); @@ -43,7 +43,7 @@ pub fn read_cur_varint(cursor: &mut Cursor<&[u8]>) -> GameResult { } #[allow(unused)] -pub fn read_varint>(iter: &mut I) -> GameResult { +pub fn read_varint>(iter: &mut I) -> GameResult { let mut result = 0u32; for o in 0..5 { diff --git a/src/scripting/tsc/compiler.rs b/src/game/scripting/tsc/compiler.rs similarity index 96% rename from src/scripting/tsc/compiler.rs rename to src/game/scripting/tsc/compiler.rs index c598eb3..6645482 100644 --- a/src/scripting/tsc/compiler.rs +++ b/src/game/scripting/tsc/compiler.rs @@ -6,11 +6,11 @@ use itertools::Itertools; use crate::framework::error::GameError::ParseError; use crate::framework::error::GameResult; -use crate::scripting::tsc::bytecode_utils::{put_string, put_varint}; -use crate::scripting::tsc::credit_script::CreditScript; -use crate::scripting::tsc::opcodes::{CreditOpCode, TSCOpCode}; -use crate::scripting::tsc::parse_utils::{expect_char, read_number, skip_until}; -use crate::scripting::tsc::text_script::{TextScript, TextScriptEncoding}; +use crate::game::scripting::tsc::bytecode_utils::{put_string, put_varint}; +use crate::game::scripting::tsc::credit_script::CreditScript; +use crate::game::scripting::tsc::opcodes::{CreditOpCode, TSCOpCode}; +use crate::game::scripting::tsc::parse_utils::{expect_char, read_number, skip_until}; +use crate::game::scripting::tsc::text_script::{TextScript, TextScriptEncoding}; impl TextScript { /// Compiles a decrypted text script data into internal bytecode. @@ -67,7 +67,7 @@ impl TextScript { Ok(TextScript { event_map }) } - fn compile_event>( + fn compile_event>( iter: &mut Peekable, strict: bool, encoding: TextScriptEncoding, @@ -131,7 +131,7 @@ impl TextScript { Ok(bytecode) } - fn compile_code>( + fn compile_code>( code: &str, strict: bool, iter: &mut Peekable, diff --git a/src/scripting/tsc/credit_script.rs b/src/game/scripting/tsc/credit_script.rs similarity index 96% rename from src/scripting/tsc/credit_script.rs rename to src/game/scripting/tsc/credit_script.rs index 85dd193..a3ae494 100644 --- a/src/scripting/tsc/credit_script.rs +++ b/src/game/scripting/tsc/credit_script.rs @@ -7,14 +7,14 @@ use num_traits::FromPrimitive; use crate::engine_constants::EngineConstants; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::scripting::tsc::bytecode_utils::{put_varint, read_cur_varint}; -use crate::scripting::tsc::encryption::decrypt_tsc; -use crate::scripting::tsc::opcodes::CreditOpCode; -use crate::shared_game_state::SharedGameState; +use crate::game::scripting::tsc::bytecode_utils::{put_varint, read_cur_varint}; +use crate::game::scripting::tsc::encryption::decrypt_tsc; +use crate::game::scripting::tsc::opcodes::CreditOpCode; +use crate::game::shared_game_state::SharedGameState; pub struct CreditScript { - pub(in crate::scripting::tsc) labels: HashMap, - pub(in crate::scripting::tsc) bytecode: Vec, + pub(crate) labels: HashMap, + pub(crate) bytecode: Vec, } impl Default for CreditScript { diff --git a/src/scripting/tsc/decompiler.rs b/src/game/scripting/tsc/decompiler.rs similarity index 97% rename from src/scripting/tsc/decompiler.rs rename to src/game/scripting/tsc/decompiler.rs index 853871f..5588d58 100644 --- a/src/scripting/tsc/decompiler.rs +++ b/src/game/scripting/tsc/decompiler.rs @@ -5,9 +5,9 @@ use num_traits::FromPrimitive; use crate::framework::error::GameError::InvalidValue; use crate::framework::error::GameResult; -use crate::scripting::tsc::bytecode_utils::read_cur_varint; -use crate::scripting::tsc::opcodes::TSCOpCode; -use crate::scripting::tsc::text_script::TextScript; +use crate::game::scripting::tsc::bytecode_utils::read_cur_varint; +use crate::game::scripting::tsc::opcodes::TSCOpCode; +use crate::game::scripting::tsc::text_script::TextScript; impl TextScript { pub fn decompile_event(&self, id: u16) -> GameResult { diff --git a/src/scripting/tsc/encryption.rs b/src/game/scripting/tsc/encryption.rs similarity index 100% rename from src/scripting/tsc/encryption.rs rename to src/game/scripting/tsc/encryption.rs diff --git a/src/scripting/tsc/mod.rs b/src/game/scripting/tsc/mod.rs similarity index 100% rename from src/scripting/tsc/mod.rs rename to src/game/scripting/tsc/mod.rs diff --git a/src/scripting/tsc/opcodes.rs b/src/game/scripting/tsc/opcodes.rs similarity index 100% rename from src/scripting/tsc/opcodes.rs rename to src/game/scripting/tsc/opcodes.rs diff --git a/src/scripting/tsc/parse_utils.rs b/src/game/scripting/tsc/parse_utils.rs similarity index 81% rename from src/scripting/tsc/parse_utils.rs rename to src/game/scripting/tsc/parse_utils.rs index d4e17aa..0b14a69 100644 --- a/src/scripting/tsc/parse_utils.rs +++ b/src/game/scripting/tsc/parse_utils.rs @@ -3,7 +3,7 @@ use std::iter::Peekable; use crate::framework::error::GameError::ParseError; use crate::framework::error::GameResult; -pub fn expect_char>(expect: u8, iter: &mut I) -> GameResult { +pub fn expect_char>(expect: u8, iter: &mut I) -> GameResult { let res = iter.next(); match res { @@ -13,7 +13,7 @@ pub fn expect_char>(expect: u8, iter: &mut I) -> GameResu } } -pub fn skip_until>(expect: u8, iter: &mut Peekable) -> GameResult { +pub fn skip_until>(expect: u8, iter: &mut Peekable) -> GameResult { while let Some(&chr) = iter.peek() { if chr == expect { return Ok(()); @@ -27,7 +27,7 @@ pub fn skip_until>(expect: u8, iter: &mut Peekable) -> /// Reads a 4 digit TSC formatted number from iterator. /// Intentionally does no '0'..'9' range checking, since it was often exploited by modders. -pub fn read_number>(iter: &mut Peekable) -> GameResult { +pub fn read_number>(iter: &mut Peekable) -> GameResult { Some(0) .and_then(|result| iter.next().map(|v| result + 1000 * v.wrapping_sub(b'0') as i32)) .and_then(|result| iter.next().map(|v| result + 100 * v.wrapping_sub(b'0') as i32)) diff --git a/src/scripting/tsc/text_script.rs b/src/game/scripting/tsc/text_script.rs similarity index 98% rename from src/scripting/tsc/text_script.rs rename to src/game/scripting/tsc/text_script.rs index 2009dc1..0dfe212 100644 --- a/src/scripting/tsc/text_script.rs +++ b/src/game/scripting/tsc/text_script.rs @@ -11,23 +11,23 @@ use std::rc::Rc; use num_traits::{clamp, FromPrimitive}; use crate::bitfield; -use crate::common::Direction::{Left, Right}; use crate::common::{Direction, FadeDirection, FadeState, Rect}; +use crate::common::Direction::{Left, Right}; use crate::engine_constants::EngineConstants; use crate::entity::GameEntity; -use crate::frame::UpdateTarget; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::frame::UpdateTarget; +use crate::game::npc::NPC; +use crate::game::player::{ControlMode, TargetPlayer}; +use crate::game::scripting::tsc::bytecode_utils::read_cur_varint; +use crate::game::scripting::tsc::encryption::decrypt_tsc; +use crate::game::scripting::tsc::opcodes::TSCOpCode; +use crate::game::shared_game_state::ReplayState; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::WeaponType; use crate::input::touch_controls::TouchControlType; -use crate::npc::NPC; -use crate::player::{ControlMode, TargetPlayer}; use crate::scene::game_scene::GameScene; -use crate::scripting::tsc::bytecode_utils::read_cur_varint; -use crate::scripting::tsc::encryption::decrypt_tsc; -use crate::scripting::tsc::opcodes::TSCOpCode; -use crate::shared_game_state::ReplayState; -use crate::shared_game_state::SharedGameState; -use crate::weapon::WeaponType; const TSC_SUBSTITUTION_MAP_SIZE: usize = 1; @@ -414,9 +414,9 @@ impl TextScriptVM { 0 } else if remaining != 2 && (game_scene.player1.controller.jump() - || game_scene.player1.controller.shoot() - || game_scene.player2.controller.jump() - || game_scene.player2.controller.shoot()) + || game_scene.player1.controller.shoot() + || game_scene.player2.controller.jump() + || game_scene.player2.controller.shoot()) { state.constants.textscript.text_speed_fast } else { @@ -640,7 +640,7 @@ impl TextScriptVM { cursor.seek(SeekFrom::Start(ip as u64))?; let op: TSCOpCode = if let Some(op) = - FromPrimitive::from_i32(read_cur_varint(&mut cursor).unwrap_or_else(|_| TSCOpCode::END as i32)) + FromPrimitive::from_i32(read_cur_varint(&mut cursor).unwrap_or_else(|_| TSCOpCode::END as i32)) { op } else { @@ -700,7 +700,7 @@ impl TextScriptVM { state.textscript_vm.set_mode(ScriptMode::StageSelect); let event_num = if let Some(slot) = - state.teleporter_slots.get(game_scene.stage_select.current_teleport_slot as usize) + state.teleporter_slots.get(game_scene.stage_select.current_teleport_slot as usize) { 1000 + slot.0 } else { @@ -1814,7 +1814,7 @@ impl TextScriptVM { } pub struct TextScript { - pub(in crate::scripting::tsc) event_map: HashMap>, + pub(crate) event_map: HashMap>, } impl Clone for TextScript { diff --git a/src/settings.rs b/src/game/settings.rs similarity index 99% rename from src/settings.rs rename to src/game/settings.rs index 2c5017c..ca9a55b 100644 --- a/src/settings.rs +++ b/src/game/settings.rs @@ -2,15 +2,15 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem::{user_create, user_open}; use crate::framework::gamepad::{Axis, AxisDirection, Button, PlayerControllerInputType}; +use crate::framework::graphics::VSyncMode; use crate::framework::keyboard::ScanCode; -use crate::graphics::VSyncMode; +use crate::game::player::TargetPlayer; +use crate::game::shared_game_state::{CutsceneSkipMode, ScreenShakeIntensity, TimingMode, WindowMode}; use crate::input::combined_player_controller::CombinedPlayerController; use crate::input::gamepad_player_controller::GamepadController; use crate::input::keyboard_player_controller::KeyboardController; use crate::input::player_controller::PlayerController; use crate::input::touch_player_controller::TouchPlayerController; -use crate::player::TargetPlayer; -use crate::shared_game_state::{CutsceneSkipMode, ScreenShakeIntensity, TimingMode, WindowMode}; use crate::sound::InterpolationMode; #[derive(serde::Serialize, serde::Deserialize)] diff --git a/src/shared_game_state.rs b/src/game/shared_game_state.rs similarity index 95% rename from src/shared_game_state.rs rename to src/game/shared_game_state.rs index 93d6f66..c8bfc08 100644 --- a/src/shared_game_state.rs +++ b/src/game/shared_game_state.rs @@ -1,40 +1,38 @@ use std::{cmp, ops::Div}; -use bitvec::vec::BitVec; use chrono::{Datelike, Local}; -use crate::bmfont_renderer::BMFontRenderer; -use crate::caret::{Caret, CaretType}; use crate::common::{ControlFlags, Direction, FadeState}; -use crate::components::draw_common::{draw_number, Alignment}; +use crate::components::draw_common::{Alignment, draw_number}; +use crate::data::vanilla::VanillaExtractor; use crate::engine_constants::EngineConstants; +use crate::framework::{filesystem, graphics}; use crate::framework::backend::BackendTexture; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics::{create_texture_mutable, set_render_target}; use crate::framework::vfs::OpenOptions; -use crate::framework::{filesystem, graphics}; -#[cfg(feature = "hooks")] -use crate::hooks::init_hooks; +use crate::game::caret::{Caret, CaretType}; +use crate::game::npc::NPCTable; +use crate::game::profile::GameProfile; +#[cfg(feature = "scripting-lua")] +use crate::game::scripting::lua::LuaScriptingState; +use crate::game::scripting::tsc::credit_script::{CreditScript, CreditScriptVM}; +use crate::game::scripting::tsc::text_script::{ScriptMode, TextScript, TextScriptExecutionState, TextScriptVM}; +use crate::game::settings::Settings; +use crate::game::stage::StageData; +use crate::graphics::bmfont_renderer::BMFontRenderer; +use crate::graphics::texture_set::TextureSet; use crate::i18n::Locale; use crate::input::touch_controls::TouchControls; use crate::mod_list::ModList; use crate::mod_requirements::ModRequirements; -use crate::npc::NPCTable; -use crate::profile::GameProfile; -use crate::rng::XorShift; use crate::scene::game_scene::GameScene; -use crate::scene::title_scene::TitleScene; use crate::scene::Scene; -#[cfg(feature = "scripting-lua")] -use crate::scripting::lua::LuaScriptingState; -use crate::scripting::tsc::credit_script::{CreditScript, CreditScriptVM}; -use crate::scripting::tsc::text_script::{ScriptMode, TextScript, TextScriptExecutionState, TextScriptVM}; -use crate::settings::Settings; +use crate::scene::title_scene::TitleScene; use crate::sound::SoundManager; -use crate::stage::StageData; -use crate::texture_set::TextureSet; -use crate::vanilla::VanillaExtractor; +use crate::util::bitvec::BitVec; +use crate::util::rng::XorShift; #[derive(PartialEq, Eq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub enum TimingMode { @@ -315,7 +313,7 @@ impl SharedGameState { pub fn new(ctx: &mut Context) -> GameResult { let mut constants = EngineConstants::defaults(); let mut sound_manager = SoundManager::new(ctx)?; - let mut settings = Settings::load(ctx)?; + let settings = Settings::load(ctx)?; let mod_requirements = ModRequirements::load(ctx)?; let vanilla_ext_exe = match option_env!("VANILLA_EXT_EXE") { @@ -409,17 +407,13 @@ impl SharedGameState { let current_time = Local::now(); let more_rust = (current_time.month() == 7 && current_time.day() == 7) || settings.more_rust; - - #[cfg(feature = "hooks")] - init_hooks(); - let seed = chrono::Local::now().timestamp() as i32; Ok(SharedGameState { control_flags: ControlFlags(0), - game_flags: bitvec::bitvec![0; 8000], - skip_flags: bitvec::bitvec![0; 64], - map_flags: bitvec::bitvec![0; 64], + game_flags: BitVec::with_size(8000), + skip_flags: BitVec::with_size(64), + map_flags: BitVec::with_size(128), fade_state: FadeState::Hidden, game_rng: XorShift::new(seed), effect_rng: XorShift::new(123), @@ -545,7 +539,7 @@ impl SharedGameState { pub fn start_new_game(&mut self, ctx: &mut Context) -> GameResult { self.reset(); #[cfg(feature = "scripting-lua")] - self.lua.reload_scripts(ctx)?; + self.lua.reload_scripts(ctx)?; let mut next_scene = GameScene::new(self, ctx, self.constants.game.new_game_stage as usize)?; next_scene.player1.cond.set_alive(true); @@ -567,7 +561,7 @@ impl SharedGameState { pub fn start_intro(&mut self, ctx: &mut Context) -> GameResult { #[cfg(feature = "scripting-lua")] - self.lua.reload_scripts(ctx)?; + self.lua.reload_scripts(ctx)?; let start_stage_id = self.constants.game.intro_stage as usize; @@ -619,7 +613,7 @@ impl SharedGameState { profile.apply(self, &mut next_scene, ctx); #[cfg(feature = "scripting-lua")] - self.lua.reload_scripts(ctx)?; + self.lua.reload_scripts(ctx)?; self.next_scene = Some(Box::new(next_scene)); return Ok(()); @@ -640,7 +634,7 @@ impl SharedGameState { pub fn reset(&mut self) { self.control_flags.0 = 0; - self.game_flags = bitvec::bitvec![0; 8000]; + self.game_flags = BitVec::with_size(8000); self.fade_state = FadeState::Hidden; self.game_rng = XorShift::new(chrono::Local::now().timestamp() as i32); self.teleporter_slots.clear(); @@ -709,14 +703,14 @@ impl SharedGameState { pub fn get_flag(&self, id: usize) -> bool { if let Some(flag) = self.game_flags.get(id) { - *flag + flag } else { false } } pub fn reset_skip_flags(&mut self) { - self.skip_flags = bitvec::bitvec![0; 64]; + self.skip_flags = BitVec::with_size(64); } pub fn set_skip_flag(&mut self, id: usize, value: bool) { @@ -729,14 +723,14 @@ impl SharedGameState { pub fn get_skip_flag(&self, id: usize) -> bool { if let Some(flag) = self.skip_flags.get(id) { - *flag + flag } else { false } } pub fn reset_map_flags(&mut self) { - self.map_flags = bitvec::bitvec![0; 128]; + self.map_flags = BitVec::with_size(128); } pub fn set_map_flag(&mut self, id: usize, value: bool) { @@ -749,7 +743,7 @@ impl SharedGameState { pub fn get_map_flag(&self, id: usize) -> bool { if let Some(flag) = self.map_flags.get(id) { - *flag + flag } else { false } diff --git a/src/stage.rs b/src/game/stage.rs similarity index 99% rename from src/stage.rs rename to src/game/stage.rs index 77d41d6..3c30845 100644 --- a/src/stage.rs +++ b/src/game/stage.rs @@ -1,20 +1,19 @@ use std::io::{Cursor, Read}; use std::str::from_utf8; -use byteorder::ReadBytesExt; use byteorder::LE; +use byteorder::ReadBytesExt; use log::info; use crate::common::Color; -use crate::encoding::read_cur_shift_jis; use crate::engine_constants::EngineConstants; use crate::framework::context::Context; +use crate::framework::error::{GameError, GameResult}; use crate::framework::error::GameError::ResourceLoadError; -use crate::framework::error::GameResult; use crate::framework::filesystem; -use crate::map::{Map, NPCData}; -use crate::scripting::tsc::text_script::TextScript; -use crate::GameError; +use crate::game::map::{Map, NPCData}; +use crate::game::scripting::tsc::text_script::TextScript; +use crate::util::encoding::read_cur_shift_jis; #[derive(Debug, PartialEq, Eq, Hash)] pub struct NpcType { diff --git a/src/weapon/blade.rs b/src/game/weapon/blade.rs similarity index 83% rename from src/weapon/blade.rs rename to src/game/weapon/blade.rs index 17a86ea..f702f08 100644 --- a/src/weapon/blade.rs +++ b/src/game/weapon/blade.rs @@ -1,11 +1,11 @@ use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_blade(&mut self, player: &Player, player_id: TargetPlayer, bullet_manager: &mut BulletManager, state: &mut SharedGameState) { + pub(crate) fn tick_blade(&mut self, player: &Player, player_id: TargetPlayer, bullet_manager: &mut BulletManager, state: &mut SharedGameState) { const BULLETS: [u16; 3] = [25, 26, 27]; if !player.controller.trigger_shoot() || bullet_manager.count_bullets_multi(&BULLETS, player_id) > 0 { diff --git a/src/weapon/bubbler.rs b/src/game/weapon/bubbler.rs similarity index 96% rename from src/weapon/bubbler.rs rename to src/game/weapon/bubbler.rs index 8d4f061..7779439 100644 --- a/src/weapon/bubbler.rs +++ b/src/game/weapon/bubbler.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_bubbler( + pub(crate) fn tick_bubbler( &mut self, player: &Player, player_id: TargetPlayer, diff --git a/src/weapon/bullet.rs b/src/game/weapon/bullet.rs similarity index 99% rename from src/weapon/bullet.rs rename to src/game/weapon/bullet.rs index 99d963a..38637ce 100644 --- a/src/weapon/bullet.rs +++ b/src/game/weapon/bullet.rs @@ -1,15 +1,15 @@ use num_traits::clamp; -use crate::caret::CaretType; use crate::common::{BulletFlag, Condition, Direction, Flag, Rect}; use crate::engine_constants::{BulletData, EngineConstants}; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::physics::{PhysicalEntity, OFFSETS}; -use crate::player::{Player, TargetPlayer}; -use crate::rng::{XorShift, Xoroshiro32PlusPlus, RNG}; -use crate::shared_game_state::{SharedGameState, TileSize}; -use crate::stage::Stage; +use crate::game::caret::CaretType; +use crate::game::npc::list::NPCList; +use crate::game::npc::NPC; +use crate::game::physics::{OFFSETS, PhysicalEntity}; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::{SharedGameState, TileSize}; +use crate::game::stage::Stage; +use crate::util::rng::{RNG, Xoroshiro32PlusPlus, XorShift}; pub struct BulletManager { pub bullets: Vec, @@ -1964,7 +1964,7 @@ impl PhysicalEntity for Bullet { } if let Some(tile) = - stage.map.tiles.get_mut(stage.map.width as usize * (y + oy) as usize + (x + ox) as usize) + stage.map.tiles.get_mut(stage.map.width as usize * (y + oy) as usize + (x + ox) as usize) { *tile = tile.wrapping_sub(1); } diff --git a/src/weapon/fireball.rs b/src/game/weapon/fireball.rs similarity index 90% rename from src/weapon/fireball.rs rename to src/game/weapon/fireball.rs index e5626f4..0682cd2 100644 --- a/src/weapon/fireball.rs +++ b/src/game/weapon/fireball.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_fireball( + pub(crate) fn tick_fireball( &mut self, player: &Player, player_id: TargetPlayer, diff --git a/src/weapon/machine_gun.rs b/src/game/weapon/machine_gun.rs similarity index 95% rename from src/weapon/machine_gun.rs rename to src/game/weapon/machine_gun.rs index 49f679e..8a42c5e 100644 --- a/src/weapon/machine_gun.rs +++ b/src/game/weapon/machine_gun.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_machine_gun( + pub(crate) fn tick_machine_gun( &mut self, player: &mut Player, player_id: TargetPlayer, diff --git a/src/weapon/missile_launcher.rs b/src/game/weapon/missile_launcher.rs similarity index 96% rename from src/weapon/missile_launcher.rs rename to src/game/weapon/missile_launcher.rs index 48b0c8d..d896498 100644 --- a/src/weapon/missile_launcher.rs +++ b/src/game/weapon/missile_launcher.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::{Bullet, BulletManager}; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::{Bullet, BulletManager}; impl Weapon { - pub(in crate::weapon) fn tick_missile_launcher( + pub(crate) fn tick_missile_launcher( &mut self, player: &mut Player, player_id: TargetPlayer, diff --git a/src/weapon/mod.rs b/src/game/weapon/mod.rs similarity index 97% rename from src/weapon/mod.rs rename to src/game/weapon/mod.rs index fdc5afb..d49a43c 100644 --- a/src/weapon/mod.rs +++ b/src/game/weapon/mod.rs @@ -1,11 +1,11 @@ use num_derive::FromPrimitive; -use crate::caret::CaretType; use crate::common::Direction; use crate::engine_constants::EngineConstants; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::bullet::BulletManager; mod blade; mod bubbler; diff --git a/src/weapon/nemesis.rs b/src/game/weapon/nemesis.rs similarity index 92% rename from src/weapon/nemesis.rs rename to src/game/weapon/nemesis.rs index 85f824c..af24b4b 100644 --- a/src/weapon/nemesis.rs +++ b/src/game/weapon/nemesis.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_nemesis( + pub(crate) fn tick_nemesis( &mut self, player: &Player, player_id: TargetPlayer, diff --git a/src/weapon/polar_star.rs b/src/game/weapon/polar_star.rs similarity index 92% rename from src/weapon/polar_star.rs rename to src/game/weapon/polar_star.rs index 296a309..ddba997 100644 --- a/src/weapon/polar_star.rs +++ b/src/game/weapon/polar_star.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_polar_star( + pub(crate) fn tick_polar_star( &mut self, player: &Player, player_id: TargetPlayer, diff --git a/src/weapon/snake.rs b/src/game/weapon/snake.rs similarity index 88% rename from src/weapon/snake.rs rename to src/game/weapon/snake.rs index f9396fb..3363ff4 100644 --- a/src/weapon/snake.rs +++ b/src/game/weapon/snake.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::{Bullet, BulletManager}; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::{Bullet, BulletManager}; impl Weapon { - pub(in crate::weapon) fn tick_snake(&mut self, player: &Player, player_id: TargetPlayer, bullet_manager: &mut BulletManager, state: &mut SharedGameState) { + pub(crate) fn tick_snake(&mut self, player: &Player, player_id: TargetPlayer, bullet_manager: &mut BulletManager, state: &mut SharedGameState) { if !player.controller.trigger_shoot() || bullet_manager.count_bullets_multi(&[1, 2, 3], player_id) > 3 { return; } diff --git a/src/weapon/spur.rs b/src/game/weapon/spur.rs similarity index 95% rename from src/weapon/spur.rs rename to src/game/weapon/spur.rs index 309030d..e571ce4 100644 --- a/src/weapon/spur.rs +++ b/src/game/weapon/spur.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::BulletManager; impl Weapon { - pub(in crate::weapon) fn tick_spur( + pub(crate) fn tick_spur( &mut self, player: &mut Player, player_id: TargetPlayer, diff --git a/src/weapon/super_missile_launcher.rs b/src/game/weapon/super_missile_launcher.rs similarity index 95% rename from src/weapon/super_missile_launcher.rs rename to src/game/weapon/super_missile_launcher.rs index 4293662..78705b9 100644 --- a/src/weapon/super_missile_launcher.rs +++ b/src/game/weapon/super_missile_launcher.rs @@ -1,12 +1,12 @@ -use crate::caret::CaretType; use crate::common::Direction; -use crate::player::{Player, TargetPlayer}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::bullet::{Bullet, BulletManager}; -use crate::weapon::{Weapon, WeaponLevel}; +use crate::game::caret::CaretType; +use crate::game::player::{Player, TargetPlayer}; +use crate::game::shared_game_state::SharedGameState; +use crate::game::weapon::{Weapon, WeaponLevel}; +use crate::game::weapon::bullet::{Bullet, BulletManager}; impl Weapon { - pub(in crate::weapon) fn tick_super_missile_launcher( + pub(crate) fn tick_super_missile_launcher( &mut self, player: &mut Player, player_id: TargetPlayer, diff --git a/src/bmfont.rs b/src/graphics/bmfont.rs similarity index 98% rename from src/bmfont.rs rename to src/graphics/bmfont.rs index e19a18d..1063c4c 100644 --- a/src/bmfont.rs +++ b/src/graphics/bmfont.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::io; -use byteorder::{ReadBytesExt, LE}; +use byteorder::{LE, ReadBytesExt}; use crate::framework::error::GameError::ResourceLoadError; use crate::framework::error::GameResult; diff --git a/src/bmfont_renderer.rs b/src/graphics/bmfont_renderer.rs similarity index 93% rename from src/bmfont_renderer.rs rename to src/graphics/bmfont_renderer.rs index 8f04ab9..25744a5 100644 --- a/src/bmfont_renderer.rs +++ b/src/graphics/bmfont_renderer.rs @@ -1,14 +1,14 @@ use std::collections::HashSet; use std::path::PathBuf; -use crate::bmfont::BMFont; -use crate::common::{Rect, FILE_TYPES}; +use crate::common::{FILE_TYPES, Rect}; use crate::engine_constants::EngineConstants; use crate::framework::context::Context; use crate::framework::error::GameError::ResourceLoadError; use crate::framework::error::GameResult; use crate::framework::filesystem; -use crate::texture_set::TextureSet; +use crate::graphics::bmfont::BMFont; +use crate::graphics::texture_set::TextureSet; pub struct BMFontRenderer { font: BMFont, @@ -50,7 +50,7 @@ impl BMFontRenderer { self.font.line_height as f32 * constants.font_scale } - pub fn text_width>(&self, iter: I, constants: &EngineConstants) -> f32 { + pub fn text_width>(&self, iter: I, constants: &EngineConstants) -> f32 { let mut offset_x = 0.0; for chr in iter { @@ -62,7 +62,7 @@ impl BMFontRenderer { offset_x } - pub fn text_width_with_rects + Clone>( + pub fn text_width_with_rects + Clone>( &self, iter: I, rect_map: &[(char, Rect)], @@ -83,7 +83,7 @@ impl BMFontRenderer { width } - pub fn draw_text>( + pub fn draw_text>( &self, iter: I, x: f32, @@ -95,7 +95,7 @@ impl BMFontRenderer { self.draw_colored_text(iter, x, y, (255, 255, 255, 255), constants, texture_set, ctx) } - pub fn draw_text_with_rects>( + pub fn draw_text_with_rects>( &self, iter: I, x: f32, @@ -119,7 +119,7 @@ impl BMFontRenderer { ) } - pub fn draw_text_with_shadow + Clone>( + pub fn draw_text_with_shadow + Clone>( &self, iter: I, x: f32, @@ -132,7 +132,7 @@ impl BMFontRenderer { self.draw_colored_text(iter, x, y, (255, 255, 255, 255), constants, texture_set, ctx) } - pub fn draw_text_with_shadow_and_rects + Clone>( + pub fn draw_text_with_shadow_and_rects + Clone>( &self, iter: I, x: f32, @@ -167,7 +167,7 @@ impl BMFontRenderer { ) } - pub fn draw_colored_text_with_shadow_scaled + Clone>( + pub fn draw_colored_text_with_shadow_scaled + Clone>( &self, iter: I, x: f32, @@ -191,7 +191,7 @@ impl BMFontRenderer { self.draw_colored_text_scaled(iter, x, y, scale, color, constants, texture_set, ctx) } - pub fn draw_colored_text_with_shadow_and_rects_scaled + Clone>( + pub fn draw_colored_text_with_shadow_and_rects_scaled + Clone>( &self, iter: I, x: f32, @@ -230,7 +230,7 @@ impl BMFontRenderer { ) } - pub fn draw_colored_text_scaled>( + pub fn draw_colored_text_scaled>( &self, iter: I, x: f32, @@ -244,7 +244,7 @@ impl BMFontRenderer { self.draw_colored_text_with_rects_scaled(iter, x, y, scale, color, constants, texture_set, &[], None, ctx) } - pub fn draw_colored_text_with_rects_scaled>( + pub fn draw_colored_text_with_rects_scaled>( &self, iter: I, x: f32, @@ -361,7 +361,7 @@ impl BMFontRenderer { Ok(()) } - pub fn draw_colored_text>( + pub fn draw_colored_text>( &self, iter: I, x: f32, @@ -374,7 +374,7 @@ impl BMFontRenderer { self.draw_colored_text_scaled(iter, x, y, 1.0, color, constants, texture_set, ctx) } - pub fn draw_colored_text_with_rects>( + pub fn draw_colored_text_with_rects>( &self, iter: I, x: f32, diff --git a/src/graphics/mod.rs b/src/graphics/mod.rs new file mode 100644 index 0000000..c655782 --- /dev/null +++ b/src/graphics/mod.rs @@ -0,0 +1,3 @@ +pub mod bmfont; +pub mod bmfont_renderer; +pub mod texture_set; diff --git a/src/texture_set.rs b/src/graphics/texture_set.rs similarity index 99% rename from src/texture_set.rs rename to src/graphics/texture_set.rs index 3226673..79438fa 100644 --- a/src/texture_set.rs +++ b/src/graphics/texture_set.rs @@ -6,7 +6,7 @@ use itertools::Itertools; use log::info; use crate::common; -use crate::common::{Rect, FILE_TYPES}; +use crate::common::{FILE_TYPES, Rect}; use crate::engine_constants::EngineConstants; use crate::framework::backend::{BackendTexture, SpriteBatchCommand}; use crate::framework::context::Context; @@ -134,8 +134,7 @@ impl SpriteBatch for DummyBatch { _flip_y: bool, _color: (u8, u8, u8, u8), _rect: &Rect, - ) { - } + ) {} fn add_rect_scaled(&mut self, _x: f32, _y: f32, _scale_x: f32, _scale_y: f32, _rect: &Rect) {} @@ -147,8 +146,7 @@ impl SpriteBatch for DummyBatch { _scale_x: f32, _scale_y: f32, _rect: &Rect, - ) { - } + ) {} fn draw(&mut self, _ctx: &mut Context) -> GameResult { Ok(()) diff --git a/src/hooks.rs b/src/hooks.rs deleted file mode 100644 index 8fd046f..0000000 --- a/src/hooks.rs +++ /dev/null @@ -1,287 +0,0 @@ -use crate::caret::CaretType; -use crate::common::{Direction, Rect}; -use crate::npc::list::NPCList; -use crate::npc::NPC; -use crate::player::Player; -use crate::rng::RNG; -use crate::shared_game_state::SharedGameState; -use crate::stage::Stage; -use crate::weapon::bullet::BulletManager; - -pub struct CHooks { - handle_npc: unsafe extern "C" fn(callbacks: *const Callbacks, ctx: *const CtxData), -} - -pub struct Callbacks { - random: unsafe extern "C" fn(ctx: *mut CtxData, min: i32, max: i32) -> i32, - play_sfx: unsafe extern "C" fn(ctx: *mut CtxData, id: u8), - set_quake: unsafe extern "C" fn(ctx: *mut CtxData, ticks: u16), - set_caret: unsafe extern "C" fn(ctx: *mut CtxData, x: i32, y: i32, id: u16, direction: u8), - get_flag: unsafe extern "C" fn(ctx: *mut CtxData, id: u16) -> bool, - get_map_data: unsafe extern "C" fn(ctx: *mut CtxData) -> MapData, - get_player_info: unsafe extern "C" fn(ctx: *mut CtxData) -> PlayerInfo, - update_player_info: unsafe extern "C" fn(ctx: *mut CtxData, player_info: *const PlayerInfo), - delete_npc_by_type: unsafe extern "C" fn(ctx: *mut CtxData, id: u16, smoke: bool), - destroy_npc: unsafe extern "C" fn(ctx: *mut CtxData, npc: *mut NPC), - vanish_npc: unsafe extern "C" fn(ctx: *mut CtxData, npc: *mut NPC), - create_npc: unsafe extern "C" fn( - ctx: *mut CtxData, - npc_id: u16, - x: i32, - y: i32, - vel_x: i32, - vel_y: i32, - direction: u16, - parent: u16, - min_id: u16, - ), - get_npc: unsafe extern "C" fn(ctx: *mut CtxData, npc_id: u16) -> *mut NPC, - current_npc: unsafe extern "C" fn(ctx: *mut CtxData) -> *mut NPC, -} - -#[repr(C)] -pub struct PlayerInfo { - x: i32, - y: i32, - vel_x: i32, - vel_y: i32, - flags: u32, - equip: u16, - anim_num: u16, - cond: u16, - shock: u8, - direct: u8, - up: bool, - down: bool, - hit: Rect -} - -#[repr(C)] -pub struct MapData { - tiles: *const u8, - attrib: *const u8, - width: u16, - height: u16, -} - -static mut HOOKS: *mut CHooks = std::ptr::null_mut(); -struct CtxData<'a, 'b, 'c, 'd, 'e, 'f>( - &'a mut NPC, - &'b mut SharedGameState, - &'c mut Player, - &'d NPCList, - &'e mut Stage, - &'f BulletManager, -); - -pub fn init_hooks() { - #[cfg(target_os = "linux")] - unsafe { - let module: *mut libc::c_void = libc::dlopen(b"./libdrshooks.so\0".as_ptr() as *const _, libc::RTLD_NOW); - if module.is_null() { - let error = libc::dlerror(); - let message = std::ffi::CString::from_raw(error).to_string_lossy().to_string(); - - log::warn!("Cannot initialize hooks?: {}", message); - return; - } - - log::info!("Loaded libhooks..."); - - let symbol: *mut libc::c_void = libc::dlsym(module, b"drs_hooks_init\0".as_ptr() as *const _); - - if symbol.is_null() { - log::warn!("initialization function hasn't been found in libhooks."); - return; - } - - let init: unsafe extern "C" fn() -> *mut CHooks = std::mem::transmute(symbol); - HOOKS = (init)(); - } - - #[cfg(target_os = "windows")] - unsafe { - use winapi::um::libloaderapi::LoadLibraryA; - use winapi::um::libloaderapi::GetProcAddress; - use winapi::um::errhandlingapi::GetLastError; - - let module = LoadLibraryA(b"drshooks.dll\0".as_ptr() as *const _); - - if module.is_null() { - let error = GetLastError(); - - log::warn!("Cannot initialize hooks?: {:#x}", error); - return; - } - - log::info!("Loaded libhooks..."); - - let symbol = GetProcAddress(module, b"drs_hooks_init\0".as_ptr() as *const _); - - if symbol.is_null() { - log::warn!("initialization function hasn't been found in libhooks."); - return; - } - - let init: unsafe extern "C" fn() -> *mut CHooks = std::mem::transmute(symbol); - HOOKS = (init)(); - } -} - -pub fn reload_hooks() {} - -pub fn run_npc_hook( - npc: &mut NPC, - state: &mut SharedGameState, - players: [&mut Player; 2], - npc_list: &NPCList, - stage: &mut Stage, - bullet_manager: &BulletManager, -) { - unsafe { - let mut ctx_data = CtxData(npc, state, players[0], npc_list, stage, bullet_manager); - - unsafe extern "C" fn random(ctx: *mut CtxData, min: i32, max: i32) -> i32 { - let ctx = &*ctx; - - ctx.0.rng.range(min..max) - }; - - unsafe extern "C" fn play_sfx(ctx: *mut CtxData, id: u8) { - (*ctx).1.sound_manager.play_sfx(id); - } - - unsafe extern "C" fn set_quake(ctx: *mut CtxData, ticks: u16) { - (*ctx).1.quake_counter = ticks; - } - - unsafe extern "C" fn set_caret(ctx: *mut CtxData, x: i32, y: i32, id: u16, direction: u8) { - (*ctx).1.create_caret( - x, - y, - CaretType::from_int(id as usize).unwrap_or(CaretType::None), - Direction::from_int_facing(direction as usize).unwrap_or(Direction::Left), - ); - } - - unsafe extern "C" fn get_flag(ctx: *mut CtxData, id: u16) -> bool { - (*ctx).1.get_flag(id as usize) - } - - unsafe extern "C" fn get_map_data(ctx: *mut CtxData) -> MapData { - let stage = &(*ctx).4; - - MapData { - tiles: stage.map.tiles.as_ptr(), - attrib: stage.map.attrib.as_ptr(), - width: stage.map.width, - height: stage.map.height, - } - } - - unsafe extern "C" fn get_player_info(ctx: *mut CtxData) -> PlayerInfo { - let player = &(*ctx).2; - - PlayerInfo { - x: player.x, - y: player.y, - vel_x: player.vel_x, - vel_y: player.vel_y, - flags: player.flags.0, - equip: player.equip.0, - anim_num: player.anim_num, - cond: player.cond.0, - shock: player.shock_counter, - direct: player.direction as u8, - up: player.up, - down: player.down, - hit: player.hit_bounds, - } - } - - unsafe extern "C" fn update_player_info(ctx: *mut CtxData, player_info: *const PlayerInfo) { - let mut player = &mut (*ctx).2; - let player_info = &(*player_info); - - player.x = player_info.x; - player.y = player_info.y; - player.vel_x = player_info.vel_x; - player.vel_y = player_info.vel_y; - player.flags.0 = player_info.flags; - player.equip.0 = player_info.equip; - player.cond.0 = player_info.cond; - player.direction = Direction::from_int(player_info.direct as usize).unwrap_or(Direction::Left); - } - - unsafe extern "C" fn create_npc( - ctx: *mut CtxData, - npc_id: u16, - x: i32, - y: i32, - vel_x: i32, - vel_y: i32, - direction: u16, - parent: u16, - min_id: u16, - ) { - let ctx = &*ctx; - - let mut npc = NPC::create(npc_id, &ctx.1.npc_table); - npc.cond.set_alive(true); - npc.x = x; - npc.y = y; - npc.vel_x = vel_x; - npc.vel_y = vel_y; - npc.direction = Direction::from_int(direction as usize).unwrap_or(Direction::Left); - npc.tsc_direction = direction; - npc.parent_id = parent; - - let _ = ctx.3.spawn(min_id, npc); - }; - - unsafe extern "C" fn get_npc(ctx: *mut CtxData, npc_id: u16) -> *mut NPC { - (*ctx).3.get_npc(npc_id as usize).unwrap() as *mut NPC - } - - unsafe extern "C" fn delete_npc_by_type(ctx: *mut CtxData, id: u16, smoke: bool) { - (*ctx).3.kill_npcs_by_type(id, smoke, (*ctx).1); - } - - unsafe extern "C" fn destroy_npc(ctx: *mut CtxData, npc: *mut NPC) { - let npc = &mut (*npc); - - npc.cond.set_explode_die(true); - } - - unsafe extern "C" fn vanish_npc(ctx: *mut CtxData, npc: *mut NPC) { - let npc = &mut (*npc); - - npc.vanish((*ctx).1); - } - - unsafe extern "C" fn current_npc(ctx: *mut CtxData) -> *mut NPC { - (*ctx).0 as *mut NPC - } - - let callbacks = Callbacks { - random, - play_sfx, - set_quake, - set_caret, - get_flag, - get_map_data, - get_player_info, - update_player_info, - delete_npc_by_type, - destroy_npc, - vanish_npc, - create_npc, - get_npc, - current_npc, - }; - - if let Some(hook) = HOOKS.as_ref() { - (hook.handle_npc)(&callbacks as *const Callbacks, &mut ctx_data as *mut CtxData); - } - } -} diff --git a/src/i18n.rs b/src/i18n.rs index 21f3f19..6e6f08b 100644 --- a/src/i18n.rs +++ b/src/i18n.rs @@ -1,7 +1,8 @@ +use std::collections::HashMap; + use crate::framework::context::Context; use crate::framework::filesystem; -use crate::shared_game_state::FontData; -use std::collections::HashMap; +use crate::game::shared_game_state::FontData; #[derive(Debug, Clone)] pub struct Locale { diff --git a/src/input/combined_menu_controller.rs b/src/input/combined_menu_controller.rs index 38ce604..4d9f074 100644 --- a/src/input/combined_menu_controller.rs +++ b/src/input/combined_menu_controller.rs @@ -1,7 +1,7 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; -use crate::shared_game_state::SharedGameState; pub struct CombinedMenuController { controllers: Vec>, diff --git a/src/input/combined_player_controller.rs b/src/input/combined_player_controller.rs index 8962b22..6ddc475 100644 --- a/src/input/combined_player_controller.rs +++ b/src/input/combined_player_controller.rs @@ -1,7 +1,7 @@ use crate::{ framework::{context::Context, error::GameResult}, - shared_game_state::SharedGameState, }; +use crate::game::shared_game_state::SharedGameState; use super::player_controller::PlayerController; diff --git a/src/input/dummy_player_controller.rs b/src/input/dummy_player_controller.rs index 95e5ef2..5f65aaa 100644 --- a/src/input/dummy_player_controller.rs +++ b/src/input/dummy_player_controller.rs @@ -1,7 +1,7 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; -use crate::shared_game_state::SharedGameState; /// A no-op implementation of player controller. #[derive(Clone)] diff --git a/src/input/gamepad_player_controller.rs b/src/input/gamepad_player_controller.rs index 75ffa81..99996b8 100644 --- a/src/input/gamepad_player_controller.rs +++ b/src/input/gamepad_player_controller.rs @@ -2,9 +2,9 @@ use crate::bitfield; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::gamepad::{self, Button, PlayerControllerInputType}; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; -use crate::player::TargetPlayer; -use crate::shared_game_state::SharedGameState; +use crate::game::player::TargetPlayer; bitfield! { #[derive(Clone, Copy)] diff --git a/src/input/keyboard_player_controller.rs b/src/input/keyboard_player_controller.rs index d3679f4..48ce5b7 100644 --- a/src/input/keyboard_player_controller.rs +++ b/src/input/keyboard_player_controller.rs @@ -3,9 +3,9 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::keyboard; use crate::framework::keyboard::ScanCode; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; -use crate::player::TargetPlayer; -use crate::shared_game_state::SharedGameState; +use crate::game::player::TargetPlayer; bitfield! { #[derive(Clone, Copy)] diff --git a/src/input/player_controller.rs b/src/input/player_controller.rs index cfbf891..34c6b60 100644 --- a/src/input/player_controller.rs +++ b/src/input/player_controller.rs @@ -1,7 +1,6 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; - -use crate::shared_game_state::SharedGameState; +use crate::game::shared_game_state::SharedGameState; pub trait PlayerController: PlayerControllerClone { fn update(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult; diff --git a/src/input/replay_player_controller.rs b/src/input/replay_player_controller.rs index 8660bef..deb582e 100644 --- a/src/input/replay_player_controller.rs +++ b/src/input/replay_player_controller.rs @@ -1,8 +1,8 @@ use crate::bitfield; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; -use crate::shared_game_state::SharedGameState; bitfield! { #[allow(unused)] diff --git a/src/input/touch_controls.rs b/src/input/touch_controls.rs index 6b7b07e..4aba61b 100644 --- a/src/input/touch_controls.rs +++ b/src/input/touch_controls.rs @@ -3,7 +3,7 @@ use crate::engine_constants::EngineConstants; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics::screen_insets_scaled; -use crate::texture_set::TextureSet; +use crate::graphics::texture_set::TextureSet; #[derive(Copy, Clone, PartialEq, Eq)] pub enum TouchControlType { diff --git a/src/input/touch_player_controller.rs b/src/input/touch_player_controller.rs index bacd21a..f86ee29 100644 --- a/src/input/touch_player_controller.rs +++ b/src/input/touch_player_controller.rs @@ -3,9 +3,9 @@ use crate::common::Rect; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics::screen_insets_scaled; +use crate::game::shared_game_state::SharedGameState; use crate::input::player_controller::PlayerController; use crate::input::touch_controls::TouchControlType; -use crate::shared_game_state::SharedGameState; /// A no-op implementation of player controller. #[derive(Clone)] @@ -88,150 +88,150 @@ impl PlayerController for TouchPlayerController { self.state.set_left( self.state.left() || state - .touch_controls - .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 2, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 2, 48, 48)) + .is_some(), ); // up self.state.set_up( self.state.up() || state - .touch_controls - .point_in(Rect::new_size(48 + left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(48 + left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) + .is_some(), ); // right self.state.set_right( self.state.right() || state - .touch_controls - .point_in(Rect::new_size( - 48 * 2 + left, - state.canvas_size.1 as isize - bottom - 48 * 2, - 48, - 48, - )) - .is_some(), + .touch_controls + .point_in(Rect::new_size( + 48 * 2 + left, + state.canvas_size.1 as isize - bottom - 48 * 2, + 48, + 48, + )) + .is_some(), ); // down self.state.set_down( self.state.down() || state - .touch_controls - .point_in(Rect::new_size(48 + left, state.canvas_size.1 as isize - bottom - 48, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(48 + left, state.canvas_size.1 as isize - bottom - 48, 48, 48)) + .is_some(), ); // left+up self.state.set_left( self.state.left() || state - .touch_controls - .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) + .is_some(), ); self.state.set_up( self.state.up() || state - .touch_controls - .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(left, state.canvas_size.1 as isize - bottom - 48 * 3, 48, 48)) + .is_some(), ); // right+up self.state.set_right( self.state.right() || state - .touch_controls - .point_in(Rect::new_size( - 48 * 2 + left, - state.canvas_size.1 as isize - bottom - 48 * 3, - 48, - 48, - )) - .is_some(), + .touch_controls + .point_in(Rect::new_size( + 48 * 2 + left, + state.canvas_size.1 as isize - bottom - 48 * 3, + 48, + 48, + )) + .is_some(), ); self.state.set_up( self.state.up() || state - .touch_controls - .point_in(Rect::new_size( - 48 * 2 + left, - state.canvas_size.1 as isize - bottom - 48 * 3, - 48, - 48, - )) - .is_some(), + .touch_controls + .point_in(Rect::new_size( + 48 * 2 + left, + state.canvas_size.1 as isize - bottom - 48 * 3, + 48, + 48, + )) + .is_some(), ); // left+down self.state.set_left( self.state.left() || state - .touch_controls - .point_in(Rect::new_size(left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) + .is_some(), ); self.state.set_down( self.state.down() || state - .touch_controls - .point_in(Rect::new_size(left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) + .is_some(), ); // right+down self.state.set_right( self.state.right() || state - .touch_controls - .point_in(Rect::new_size(48 * 2 + left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(48 * 2 + left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) + .is_some(), ); self.state.set_down( self.state.down() || state - .touch_controls - .point_in(Rect::new_size(48 * 2 + left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) - .is_some(), + .touch_controls + .point_in(Rect::new_size(48 * 2 + left, state.canvas_size.1 as isize - 48 - bottom, 48, 48)) + .is_some(), ); self.state.set_inventory( self.state.inventory() || state.touch_controls.consume_click_in(Rect::new_size( - state.canvas_size.0 as isize - 48 - right, - top, - 48, - 48, - )), + state.canvas_size.0 as isize - 48 - right, + top, + 48, + 48, + )), ); self.state.set_jump( self.state.jump() || state - .touch_controls - .point_in(Rect::new_size( - state.canvas_size.0 as isize - 48 - right, - state.canvas_size.1 as isize - (48 + 4) - bottom, - 48, - 48, - )) - .is_some(), + .touch_controls + .point_in(Rect::new_size( + state.canvas_size.0 as isize - 48 - right, + state.canvas_size.1 as isize - (48 + 4) - bottom, + 48, + 48, + )) + .is_some(), ); self.state.set_shoot( self.state.shoot() || state - .touch_controls - .point_in(Rect::new_size( - state.canvas_size.0 as isize - 48 - right, - state.canvas_size.1 as isize - (48 + 4) * 2 - bottom, - 48, - 48, - )) - .is_some(), + .touch_controls + .point_in(Rect::new_size( + state.canvas_size.0 as isize - 48 - right, + state.canvas_size.1 as isize - (48 + 4) * 2 - bottom, + 48, + 48, + )) + .is_some(), ); self.state.set_pause( diff --git a/src/lib.rs b/src/lib.rs index 9451f32..29588b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,360 +4,23 @@ extern crate strum; #[macro_use] extern crate strum_macros; -use std::cell::UnsafeCell; -use std::env; -use std::path::PathBuf; -use std::sync::Mutex; -use std::time::{Duration, Instant}; - -use directories::ProjectDirs; -use lazy_static::lazy_static; - -use crate::builtin_fs::BuiltinFS; -use crate::framework::context::Context; -use crate::framework::error::{GameError, GameResult}; -use crate::framework::filesystem::{mount_user_vfs, mount_vfs}; -use crate::framework::graphics; -use crate::framework::graphics::VSyncMode; -use crate::framework::ui::UI; -use crate::framework::vfs::PhysicalFS; -use crate::scene::loading_scene::LoadingScene; -use crate::scene::Scene; -use crate::scripting::tsc::text_script::ScriptMode; -use crate::shared_game_state::{Fps, SharedGameState, TimingMode}; -use crate::texture_set::{G_MAG, I_MAG}; - -mod bmfont; -mod bmfont_renderer; -mod builtin_fs; -mod caret; mod common; mod components; +mod data; #[cfg(feature = "editor")] mod editor; -mod encoding; mod engine_constants; mod entity; -mod exe_parser; -mod frame; mod framework; -#[cfg(feature = "hooks")] -mod hooks; +pub mod game; +mod graphics; mod i18n; mod input; -mod inventory; mod live_debugger; mod macros; -mod map; mod menu; mod mod_list; mod mod_requirements; -mod npc; -mod physics; -mod player; -mod profile; -mod rng; mod scene; -mod scripting; -mod settings; -#[cfg(feature = "backend-gfx")] -mod shaders; -mod shared_game_state; mod sound; -mod stage; -mod texture_set; -mod vanilla; -mod weapon; - -pub struct LaunchOptions { - pub server_mode: bool, - pub editor: bool, -} - -lazy_static! { - pub static ref GAME_SUSPENDED: Mutex = Mutex::new(false); -} - -pub struct Game { - scene: Option>, - state: UnsafeCell, - ui: UI, - start_time: Instant, - last_tick: u128, - next_tick: u128, - loops: u32, - next_tick_draw: u128, - present: bool, - fps: Fps, -} - -impl Game { - fn new(ctx: &mut Context) -> GameResult { - let s = Game { - scene: None, - ui: UI::new(ctx)?, - state: UnsafeCell::new(SharedGameState::new(ctx)?), - start_time: Instant::now(), - last_tick: 0, - next_tick: 0, - loops: 0, - next_tick_draw: 0, - present: true, - fps: Fps::new(), - }; - - Ok(s) - } - - fn update(&mut self, ctx: &mut Context) -> GameResult { - if let Some(scene) = &mut self.scene { - let state_ref = unsafe { &mut *self.state.get() }; - - let speed = - if state_ref.textscript_vm.mode == ScriptMode::Map && state_ref.textscript_vm.flags.cutscene_skip() { - 4.0 * state_ref.settings.speed - } else { - 1.0 * state_ref.settings.speed - }; - - match state_ref.settings.timing_mode { - TimingMode::_50Hz | TimingMode::_60Hz => { - let last_tick = self.next_tick; - - while self.start_time.elapsed().as_nanos() >= self.next_tick && self.loops < 10 { - if (speed - 1.0).abs() < 0.01 { - self.next_tick += state_ref.settings.timing_mode.get_delta() as u128; - } else { - self.next_tick += (state_ref.settings.timing_mode.get_delta() as f64 / speed) as u128; - } - self.loops += 1; - } - - if self.loops == 10 { - log::warn!("Frame skip is way too high, a long system lag occurred?"); - self.last_tick = self.start_time.elapsed().as_nanos(); - self.next_tick = - self.last_tick + (state_ref.settings.timing_mode.get_delta() as f64 / speed) as u128; - self.loops = 0; - } - - if self.loops != 0 { - scene.draw_tick(state_ref)?; - self.last_tick = last_tick; - } - - for _ in 0..self.loops { - scene.tick(state_ref, ctx)?; - } - self.fps.tick_count = self.fps.tick_count.saturating_add(self.loops as u32); - } - TimingMode::FrameSynchronized => { - scene.tick(state_ref, ctx)?; - } - } - } - Ok(()) - } - - fn draw(&mut self, ctx: &mut Context) -> GameResult { - let state_ref = unsafe { &mut *self.state.get() }; - - match ctx.vsync_mode { - VSyncMode::Uncapped | VSyncMode::VSync => { - self.present = true; - } - _ => unsafe { - self.present = false; - - let divisor = match ctx.vsync_mode { - VSyncMode::VRRTickSync1x => 1, - VSyncMode::VRRTickSync2x => 2, - VSyncMode::VRRTickSync3x => 3, - _ => std::hint::unreachable_unchecked(), - }; - - let delta = (state_ref.settings.timing_mode.get_delta() / divisor) as u64; - - let now = self.start_time.elapsed().as_nanos(); - if now > self.next_tick_draw + delta as u128 * 4 { - self.next_tick_draw = now; - } - - while self.start_time.elapsed().as_nanos() >= self.next_tick_draw { - self.next_tick_draw += delta as u128; - self.present = true; - } - }, - } - - if !self.present { - std::thread::sleep(Duration::from_millis(2)); - self.loops = 0; - return Ok(()); - } - - if ctx.headless { - self.loops = 0; - state_ref.frame_time = 1.0; - return Ok(()); - } - - if state_ref.settings.timing_mode != TimingMode::FrameSynchronized { - let mut elapsed = self.start_time.elapsed().as_nanos(); - - // Even with the non-monotonic Instant mitigation at the start of the event loop, there's still a chance of it not working. - // This check here should trigger if that happens and makes sure there's no panic from an underflow. - if elapsed < self.last_tick { - elapsed = self.last_tick; - } - - let n1 = (elapsed - self.last_tick) as f64; - let n2 = (self.next_tick - self.last_tick) as f64; - state_ref.frame_time = if state_ref.settings.motion_interpolation { n1 / n2 } else { 1.0 }; - } - unsafe { - G_MAG = if state_ref.settings.subpixel_coords { state_ref.scale } else { 1.0 }; - I_MAG = state_ref.scale; - } - self.loops = 0; - - graphics::prepare_draw(ctx)?; - graphics::clear(ctx, [0.0, 0.0, 0.0, 1.0].into()); - - if let Some(scene) = &mut self.scene { - scene.draw(state_ref, ctx)?; - if state_ref.settings.touch_controls { - state_ref.touch_controls.draw( - state_ref.canvas_size, - state_ref.scale, - &state_ref.constants, - &mut state_ref.texture_set, - ctx, - )?; - } - - if state_ref.settings.fps_counter { - self.fps.act(state_ref, ctx, self.start_time.elapsed().as_nanos())?; - } - - self.ui.draw(state_ref, ctx, scene)?; - } - - graphics::present(ctx)?; - - Ok(()) - } -} - -pub fn init(options: LaunchOptions) -> GameResult { - let _ = simple_logger::SimpleLogger::new() - .without_timestamps() - .with_colors(true) - .with_level(log::Level::Info.to_level_filter()) - .init(); - - #[cfg(not(target_os = "android"))] - let resource_dir = if let Ok(data_dir) = env::var("CAVESTORY_DATA_DIR") { - PathBuf::from(data_dir) - } else { - let mut resource_dir = env::current_exe()?; - if resource_dir.file_name().is_some() { - let _ = resource_dir.pop(); - } - - #[cfg(target_os = "macos")] - { - let mut bundle_dir = resource_dir.clone(); - let _ = bundle_dir.pop(); - let mut bundle_exec_dir = bundle_dir.clone(); - let mut csplus_data_dir = bundle_dir.clone(); - let _ = csplus_data_dir.pop(); - let _ = csplus_data_dir.pop(); - let mut csplus_data_base_dir = csplus_data_dir.clone(); - csplus_data_base_dir.push("data"); - csplus_data_base_dir.push("base"); - - bundle_exec_dir.push("MacOS"); - bundle_dir.push("Resources"); - - if bundle_exec_dir.is_dir() && bundle_dir.is_dir() { - log::info!("Running in macOS bundle mode"); - - if csplus_data_base_dir.is_dir() { - log::info!("Cave Story+ Steam detected"); - resource_dir = csplus_data_dir; - } else { - resource_dir = bundle_dir; - } - } - } - - resource_dir.push("data"); - resource_dir - }; - - #[cfg(not(target_os = "android"))] - log::info!("Resource directory: {:?}", resource_dir); - log::info!("Initializing engine..."); - - let mut context = Context::new(); - #[cfg(not(target_os = "android"))] - mount_vfs(&mut context, Box::new(PhysicalFS::new(&resource_dir, true))); - - #[cfg(not(target_os = "android"))] - let project_dirs = match ProjectDirs::from("", "", "doukutsu-rs") { - Some(dirs) => dirs, - None => { - return Err(GameError::FilesystemError(String::from("No valid home directory path could be retrieved."))); - } - }; - #[cfg(target_os = "android")] - { - let mut data_path = - PathBuf::from(ndk_glue::native_activity().internal_data_path().to_string_lossy().to_string()); - let mut user_path = data_path.clone(); - - data_path.push("data"); - user_path.push("saves"); - - let _ = std::fs::create_dir_all(&data_path); - let _ = std::fs::create_dir_all(&user_path); - - log::info!("Android data directories: data_path={:?} user_path={:?}", &data_path, &user_path); - - mount_vfs(&mut context, Box::new(PhysicalFS::new(&data_path, true))); - mount_user_vfs(&mut context, Box::new(PhysicalFS::new(&user_path, false))); - } - - #[cfg(not(target_os = "android"))] - { - if crate::framework::filesystem::open(&context, "/.drs_localstorage").is_ok() { - let mut user_dir = resource_dir.clone(); - user_dir.push("_drs_profile"); - - let _ = std::fs::create_dir_all(&user_dir); - mount_user_vfs(&mut context, Box::new(PhysicalFS::new(&user_dir, false))); - } else { - mount_user_vfs(&mut context, Box::new(PhysicalFS::new(project_dirs.data_local_dir(), false))); - } - } - - mount_vfs(&mut context, Box::new(BuiltinFS::new())); - - if options.server_mode { - log::info!("Running in server mode..."); - context.headless = true; - } - - let game = UnsafeCell::new(Game::new(&mut context)?); - let state_ref = unsafe { &mut *((&mut *game.get()).state.get()) }; - #[cfg(feature = "scripting-lua")] - { - state_ref.lua.update_refs(unsafe { (&*game.get()).state.get() }, &mut context as *mut Context); - } - - state_ref.next_scene = Some(Box::new(LoadingScene::new())); - context.run(unsafe { &mut *game.get() })?; - - Ok(()) -} +mod util; diff --git a/src/live_debugger/command_line.rs b/src/live_debugger/command_line.rs index 015f25d..9468f37 100644 --- a/src/live_debugger/command_line.rs +++ b/src/live_debugger/command_line.rs @@ -1,11 +1,11 @@ use num_traits::FromPrimitive; use crate::framework::error::{GameError::CommandLineError, GameResult}; -use crate::npc::NPC; +use crate::game::shared_game_state::SharedGameState; +use crate::game::npc::NPC; use crate::scene::game_scene::GameScene; -use crate::scripting::tsc::text_script::{ScriptMode, TextScript, TextScriptEncoding}; -use crate::shared_game_state::SharedGameState; -use crate::weapon::WeaponType; +use crate::game::scripting::tsc::text_script::{ScriptMode, TextScript, TextScriptEncoding}; +use crate::game::weapon::WeaponType; #[derive(Clone)] pub enum CommandLineCommand { diff --git a/src/live_debugger/mod.rs b/src/live_debugger/mod.rs index 4f9850e..fcc9268 100644 --- a/src/live_debugger/mod.rs +++ b/src/live_debugger/mod.rs @@ -3,9 +3,9 @@ use itertools::Itertools; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::SharedGameState; use crate::scene::game_scene::GameScene; -use crate::scripting::tsc::text_script::TextScriptExecutionState; -use crate::shared_game_state::SharedGameState; +use crate::game::scripting::tsc::text_script::TextScriptExecutionState; use self::command_line::CommandLineParser; @@ -187,15 +187,15 @@ impl LiveDebugger { } #[cfg(feature = "scripting-lua")] - { - ui.same_line(); - if ui.button("Reload Lua Scripts") { - if let Err(err) = state.lua.reload_scripts(ctx) { - log::error!("Error reloading scripts: {:?}", err); - self.error = Some(ImString::new(err.to_string())); + { + ui.same_line(); + if ui.button("Reload Lua Scripts") { + if let Err(err) = state.lua.reload_scripts(ctx) { + log::error!("Error reloading scripts: {:?}", err); + self.error = Some(ImString::new(err.to_string())); + } } } - } if game_scene.player2.cond.alive() { if ui.button("Drop Player 2") { @@ -216,8 +216,7 @@ impl LiveDebugger { let _ = state.save_game(game_scene, ctx); state.sound_manager.play_sfx(18); } - } else if ui.button("Busy") { - } + } else if ui.button("Busy") {} ui.same_line(); if ui.button("Hotkey List") { diff --git a/src/main.rs b/src/main.rs index d4be069..a81e46c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,10 +4,7 @@ use std::process::exit; fn main() { let args = std::env::args(); - let mut options = doukutsu_rs::LaunchOptions { - server_mode: false, - editor: false, - }; + let mut options = doukutsu_rs::game::LaunchOptions { server_mode: false, editor: false }; for arg in args { if arg == "--server-mode" { @@ -24,26 +21,25 @@ fn main() { exit(1); } - let result = doukutsu_rs::init(options); + let result = doukutsu_rs::game::init(options); #[cfg(target_os = "windows")] unsafe { - use winapi::_core::ptr::null_mut; - use winapi::um::winuser::MessageBoxW; - use winapi::um::winuser::MB_OK; - use winapi::shared::ntdef::LPCWSTR; use std::ffi::OsStr; use std::os::windows::prelude::*; + use winapi::_core::ptr::null_mut; + use winapi::shared::ntdef::LPCWSTR; + use winapi::um::winuser::MessageBoxW; + use winapi::um::winuser::MB_OK; if let Err(e) = result { - let title: LPCWSTR = OsStr::new("Error!") - .encode_wide().chain(Some(0)).collect::>().as_ptr(); + let title: LPCWSTR = OsStr::new("Error!").encode_wide().chain(Some(0)).collect::>().as_ptr(); let message: LPCWSTR = OsStr::new(format!("Whoops, doukutsu-rs crashed: {}", e).as_str()) - .encode_wide().chain(Some(0)).collect::>().as_ptr(); - MessageBoxW(null_mut(), - message, - title, - MB_OK); + .encode_wide() + .chain(Some(0)) + .collect::>() + .as_ptr(); + MessageBoxW(null_mut(), message, title, MB_OK); exit(1); } } diff --git a/src/menu/controls_menu.rs b/src/menu/controls_menu.rs index a8c25d8..d59834d 100644 --- a/src/menu/controls_menu.rs +++ b/src/menu/controls_menu.rs @@ -2,12 +2,12 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::gamepad::{self, Axis, AxisDirection, Button, PlayerControllerInputType}; use crate::framework::keyboard::ScanCode; -use crate::input::combined_menu_controller::CombinedMenuController; -use crate::settings::{ - p1_default_keymap, p2_default_keymap, player_default_controller_button_map, ControllerType, +use crate::game::settings::{ + ControllerType, p1_default_keymap, p2_default_keymap, player_default_controller_button_map, PlayerControllerButtonMap, PlayerKeyMap, }; -use crate::shared_game_state::SharedGameState; +use crate::game::shared_game_state::SharedGameState; +use crate::input::combined_menu_controller::CombinedMenuController; use super::{ControlMenuData, Menu, MenuEntry, MenuSelectionResult}; diff --git a/src/menu/coop_menu.rs b/src/menu/coop_menu.rs index 70184e8..43a0170 100644 --- a/src/menu/coop_menu.rs +++ b/src/menu/coop_menu.rs @@ -1,9 +1,9 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::shared_game_state::{PlayerCount, SharedGameState}; use crate::input::combined_menu_controller::CombinedMenuController; -use crate::menu::MenuEntry; use crate::menu::{Menu, MenuSelectionResult}; -use crate::shared_game_state::{PlayerCount, SharedGameState}; +use crate::menu::MenuEntry; pub enum CurrentMenu { CoopMenu, diff --git a/src/menu/mod.rs b/src/menu/mod.rs index 3ac4bed..1ad15f5 100644 --- a/src/menu/mod.rs +++ b/src/menu/mod.rs @@ -1,13 +1,13 @@ use std::cell::Cell; use crate::common::{Color, Rect}; -use crate::components::draw_common::{draw_number, Alignment}; +use crate::components::draw_common::{Alignment, draw_number}; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics; +use crate::game::shared_game_state::{GameDifficulty, MenuCharacter, SharedGameState}; use crate::input::combined_menu_controller::CombinedMenuController; use crate::menu::save_select_menu::MenuSaveInfo; -use crate::shared_game_state::{GameDifficulty, MenuCharacter, SharedGameState}; pub mod controls_menu; pub mod coop_menu; @@ -750,41 +750,41 @@ impl Menu { | MenuEntry::SaveData(_) | MenuEntry::NewSave | MenuEntry::PlayerSkin - if (self.selected == idx && controller.trigger_ok()) - || state.touch_controls.consume_click_in(entry_bounds) => - { - state.sound_manager.play_sfx(18); - self.selected = idx.clone(); - return MenuSelectionResult::Selected(idx, entry); - } + if (self.selected == idx && controller.trigger_ok()) + || state.touch_controls.consume_click_in(entry_bounds) => + { + state.sound_manager.play_sfx(18); + self.selected = idx.clone(); + return MenuSelectionResult::Selected(idx, entry); + } MenuEntry::Options(_, _, _) | MenuEntry::OptionsBar(_, _) - if (self.selected == idx && controller.trigger_left()) - || state.touch_controls.consume_click_in(left_entry_bounds) => - { - state.sound_manager.play_sfx(1); - return MenuSelectionResult::Left(self.selected.clone(), entry, -1); - } + if (self.selected == idx && controller.trigger_left()) + || state.touch_controls.consume_click_in(left_entry_bounds) => + { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Left(self.selected.clone(), entry, -1); + } MenuEntry::Options(_, _, _) | MenuEntry::OptionsBar(_, _) - if (self.selected == idx && controller.trigger_right()) - || state.touch_controls.consume_click_in(right_entry_bounds) => - { - state.sound_manager.play_sfx(1); - return MenuSelectionResult::Right(self.selected.clone(), entry, 1); - } + if (self.selected == idx && controller.trigger_right()) + || state.touch_controls.consume_click_in(right_entry_bounds) => + { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Right(self.selected.clone(), entry, 1); + } MenuEntry::DescriptiveOptions(_, _, _, _) - if (self.selected == idx && controller.trigger_left()) - || state.touch_controls.consume_click_in(left_entry_bounds) => - { - state.sound_manager.play_sfx(1); - return MenuSelectionResult::Left(self.selected.clone(), entry, -1); - } + if (self.selected == idx && controller.trigger_left()) + || state.touch_controls.consume_click_in(left_entry_bounds) => + { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Left(self.selected.clone(), entry, -1); + } MenuEntry::DescriptiveOptions(_, _, _, _) | MenuEntry::SaveData(_) - if (self.selected == idx && controller.trigger_right()) - || state.touch_controls.consume_click_in(right_entry_bounds) => - { - state.sound_manager.play_sfx(1); - return MenuSelectionResult::Right(self.selected.clone(), entry, 1); - } + if (self.selected == idx && controller.trigger_right()) + || state.touch_controls.consume_click_in(right_entry_bounds) => + { + state.sound_manager.play_sfx(1); + return MenuSelectionResult::Right(self.selected.clone(), entry, 1); + } MenuEntry::Control(_, _) => { if self.selected == idx && controller.trigger_ok() || state.touch_controls.consume_click_in(entry_bounds) diff --git a/src/menu/pause_menu.rs b/src/menu/pause_menu.rs index ce58f96..3fe8b17 100644 --- a/src/menu/pause_menu.rs +++ b/src/menu/pause_menu.rs @@ -2,11 +2,11 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::graphics; use crate::framework::keyboard::ScanCode; +use crate::game::shared_game_state::{MenuCharacter, PlayerCount, SharedGameState}; use crate::input::combined_menu_controller::CombinedMenuController; -use crate::menu::MenuEntry; use crate::menu::{Menu, MenuSelectionResult}; +use crate::menu::MenuEntry; use crate::scene::title_scene::TitleScene; -use crate::shared_game_state::{MenuCharacter, PlayerCount, SharedGameState}; use super::coop_menu::PlayerCountMenu; use super::settings_menu::SettingsMenu; diff --git a/src/menu/save_select_menu.rs b/src/menu/save_select_menu.rs index b82963e..bd83c9f 100644 --- a/src/menu/save_select_menu.rs +++ b/src/menu/save_select_menu.rs @@ -1,12 +1,12 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem; +use crate::game::profile::GameProfile; +use crate::game::shared_game_state::{GameDifficulty, SharedGameState}; use crate::input::combined_menu_controller::CombinedMenuController; +use crate::menu::{Menu, MenuSelectionResult}; use crate::menu::coop_menu::PlayerCountMenu; use crate::menu::MenuEntry; -use crate::menu::{Menu, MenuSelectionResult}; -use crate::profile::GameProfile; -use crate::shared_game_state::{GameDifficulty, SharedGameState}; #[derive(Clone, Copy)] pub struct MenuSaveInfo { @@ -23,6 +23,7 @@ impl Default for MenuSaveInfo { MenuSaveInfo { current_map: 0, max_life: 0, life: 0, weapon_count: 0, weapon_id: [0; 8], difficulty: 0 } } } + #[derive(PartialEq, Eq, Copy, Clone)] #[repr(u8)] #[allow(unused)] @@ -254,7 +255,7 @@ impl SaveSelectMenu { state.save_slot = slot + 1; if let Ok(_) = - filesystem::user_open(ctx, state.get_save_filename(state.save_slot).unwrap_or("".to_string())) + filesystem::user_open(ctx, state.get_save_filename(state.save_slot).unwrap_or("".to_string())) { if let (_, MenuEntry::SaveData(save)) = self.save_menu.entries[slot] { self.save_detailed.entries.clear(); diff --git a/src/menu/settings_menu.rs b/src/menu/settings_menu.rs index 9dcd654..99fd68c 100644 --- a/src/menu/settings_menu.rs +++ b/src/menu/settings_menu.rs @@ -1,15 +1,15 @@ use itertools::Itertools; +use crate::framework::{filesystem, graphics}; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::framework::filesystem; +use crate::framework::graphics::VSyncMode; +use crate::game::shared_game_state::{CutsceneSkipMode, ScreenShakeIntensity, SharedGameState, TimingMode, WindowMode}; use crate::input::combined_menu_controller::CombinedMenuController; -use crate::menu::MenuEntry; use crate::menu::{Menu, MenuSelectionResult}; +use crate::menu::MenuEntry; use crate::scene::title_scene::TitleScene; -use crate::shared_game_state::{CutsceneSkipMode, ScreenShakeIntensity, SharedGameState, TimingMode, WindowMode}; use crate::sound::InterpolationMode; -use crate::{graphics, VSyncMode}; use super::controls_menu::ControlsMenu; @@ -181,7 +181,7 @@ impl SettingsMenu { pub fn init(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { #[cfg(not(target_os = "android"))] - self.graphics.push_entry( + self.graphics.push_entry( GraphicsMenuEntry::WindowMode, MenuEntry::Options( state.t("menus.options_menu.graphics_menu.window_mode.entry"), @@ -295,7 +295,7 @@ impl SettingsMenu { self.main.push_entry(MainMenuEntry::Sound, MenuEntry::Active(state.t("menus.options_menu.sound"))); #[cfg(not(target_os = "android"))] - self.main.push_entry(MainMenuEntry::Controls, MenuEntry::Active(state.t("menus.options_menu.controls"))); + self.main.push_entry(MainMenuEntry::Controls, MenuEntry::Active(state.t("menus.options_menu.controls"))); self.language.push_entry(LanguageMenuEntry::Title, MenuEntry::Disabled(state.t("menus.options_menu.language"))); diff --git a/src/mod_list.rs b/src/mod_list.rs index 000426c..7a5ddba 100644 --- a/src/mod_list.rs +++ b/src/mod_list.rs @@ -3,9 +3,10 @@ use std::io::{BufRead, BufReader}; use std::iter::Peekable; use std::str::Chars; +use crate::framework::context::Context; +use crate::framework::error::GameResult; use crate::framework::filesystem; use crate::mod_requirements::ModRequirements; -use crate::{Context, GameResult}; #[derive(Debug)] pub struct ModInfo { diff --git a/src/npc/ai/mod.rs b/src/npc/ai/mod.rs deleted file mode 100644 index 839641c..0000000 --- a/src/npc/ai/mod.rs +++ /dev/null @@ -1,28 +0,0 @@ -pub(super) mod balcony; -pub(super) mod balrog; -pub(super) mod booster; -pub(super) mod chaco; -pub(super) mod characters; -pub(super) mod curly; -pub(super) mod doctor; -pub(super) mod egg_corridor; -pub(super) mod first_cave; -pub(super) mod grasstown; -pub(super) mod hell; -pub(super) mod igor; -pub(super) mod intro; -pub(super) mod last_cave; -pub(super) mod maze; -pub(super) mod mimiga_village; -pub(super) mod misc; -pub(super) mod misery; -pub(super) mod outer_wall; -pub(super) mod pickups; -pub(super) mod plantation; -pub(super) mod quote; -pub(super) mod sand_zone; -pub(super) mod santa; -pub(super) mod sue; -pub(super) mod toroko; -pub(super) mod weapon_trail; -pub(super) mod wind_fortress; diff --git a/src/scene/editor_scene.rs b/src/scene/editor_scene.rs index 7680307..ec757d5 100644 --- a/src/scene/editor_scene.rs +++ b/src/scene/editor_scene.rs @@ -4,14 +4,14 @@ use std::rc::Rc; use downcast::Downcast; use imgui::{Condition, MenuItem, TabItem, TabItemFlags, Window}; +use crate::{Context, GameResult, Scene, SharedGameState}; use crate::editor::{CurrentTool, EditorInstance}; use crate::framework::keyboard; use crate::framework::keyboard::ScanCode; use crate::framework::ui::Components; +use crate::game::stage::Stage; use crate::scene::game_scene::GameScene; use crate::scene::title_scene::TitleScene; -use crate::stage::Stage; -use crate::{Context, GameResult, Scene, SharedGameState}; struct ErrorList { errors: Vec, diff --git a/src/scene/game_scene.rs b/src/scene/game_scene.rs index a4b733b..1e7b527 100644 --- a/src/scene/game_scene.rs +++ b/src/scene/game_scene.rs @@ -4,8 +4,7 @@ use std::rc::Rc; use log::info; -use crate::caret::CaretType; -use crate::common::{interpolate_fix9_scale, Color, Direction, Rect}; +use crate::common::{Color, Direction, interpolate_fix9_scale, Rect}; use crate::components::background::Background; use crate::components::boss_life_bar::BossLifeBar; use crate::components::credits::Credits; @@ -24,34 +23,35 @@ use crate::components::tilemap::{TileLayer, Tilemap}; use crate::components::water_renderer::{WaterLayer, WaterRenderer}; use crate::components::whimsical_star::WhimsicalStar; use crate::entity::GameEntity; -use crate::frame::{Frame, UpdateTarget}; +use crate::framework::{filesystem, gamepad, graphics}; use crate::framework::backend::SpriteBatchCommand; use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::framework::graphics::{draw_rect, BlendMode, FilterMode}; +use crate::framework::graphics::{BlendMode, draw_rect, FilterMode}; use crate::framework::keyboard::ScanCode; use crate::framework::ui::Components; -use crate::framework::{filesystem, gamepad, graphics}; +use crate::game::caret::CaretType; +use crate::game::frame::{Frame, UpdateTarget}; +use crate::game::inventory::{Inventory, TakeExperienceResult}; +use crate::game::map::WaterParams; +use crate::game::physics::{OFFSETS, PhysicalEntity}; +use crate::game::settings::ControllerType; +use crate::game::shared_game_state::{CutsceneSkipMode, PlayerCount, ReplayState, SharedGameState, TileSize}; +use crate::game::stage::{BackgroundType, Stage, StageTexturePaths}; +use crate::graphics::texture_set::SpriteBatch; use crate::input::touch_controls::TouchControlType; -use crate::inventory::{Inventory, TakeExperienceResult}; -use crate::map::WaterParams; use crate::menu::pause_menu::PauseMenu; -use crate::npc::boss::BossNPC; -use crate::npc::list::NPCList; -use crate::npc::{NPCLayer, NPC}; -use crate::physics::{PhysicalEntity, OFFSETS}; -use crate::player::{ControlMode, Player, TargetPlayer}; -use crate::rng::RNG; -use crate::scene::title_scene::TitleScene; +use crate::game::npc::{NPC, NPCLayer}; +use crate::game::npc::boss::BossNPC; +use crate::game::npc::list::NPCList; +use crate::game::player::{ControlMode, Player, TargetPlayer}; use crate::scene::Scene; -use crate::scripting::tsc::credit_script::CreditScriptVM; -use crate::scripting::tsc::text_script::{ScriptMode, TextScriptExecutionState, TextScriptVM}; -use crate::settings::ControllerType; -use crate::shared_game_state::{CutsceneSkipMode, PlayerCount, ReplayState, SharedGameState, TileSize}; -use crate::stage::{BackgroundType, Stage, StageTexturePaths}; -use crate::texture_set::SpriteBatch; -use crate::weapon::bullet::BulletManager; -use crate::weapon::{Weapon, WeaponType}; +use crate::scene::title_scene::TitleScene; +use crate::game::scripting::tsc::credit_script::CreditScriptVM; +use crate::game::scripting::tsc::text_script::{ScriptMode, TextScriptExecutionState, TextScriptVM}; +use crate::util::rng::RNG; +use crate::game::weapon::{Weapon, WeaponType}; +use crate::game::weapon::bullet::BulletManager; pub struct GameScene { pub tick: u32, @@ -199,14 +199,14 @@ impl GameScene { if npc.layer != layer || npc.x < (self.frame.x - 128 * 0x200 - npc.display_bounds.width() as i32 * 0x200) || npc.x - > (self.frame.x - + 128 * 0x200 - + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) - && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) + > (self.frame.x + + 128 * 0x200 + + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) + && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) || npc.y - > (self.frame.y - + 128 * 0x200 - + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200) + > (self.frame.y + + 128 * 0x200 + + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200) { continue; } @@ -420,45 +420,45 @@ impl GameScene { && y >= bymth && y <= bypth) || ((tile == 0x50 || tile == 0x70) - && x >= bxmth - && x <= bxpth - && y <= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 + tfq) - && y >= bymth) + && x >= bxmth + && x <= bxpth + && y <= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 + tfq) + && y >= bymth) || ((tile == 0x51 || tile == 0x71) - && x >= bxmth - && x <= bxpth - && y <= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 - tfq) - && y >= bymth) + && x >= bxmth + && x <= bxpth + && y <= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 - tfq) + && y >= bymth) || ((tile == 0x52 || tile == 0x72) - && x >= bxmth - && x <= bxpth - && y <= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 - tfq) - && y >= bymth) + && x >= bxmth + && x <= bxpth + && y <= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 - tfq) + && y >= bymth) || ((tile == 0x53 || tile == 0x73) - && x >= bxmth - && x <= bxpth - && y <= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 + tfq) - && y >= bymth) + && x >= bxmth + && x <= bxpth + && y <= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 + tfq) + && y >= bymth) || ((tile == 0x54 || tile == 0x74) - && x >= bxmth - && x <= bxpth - && y >= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 - tfq) - && y <= bypth) + && x >= bxmth + && x <= bxpth + && y >= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 - tfq) + && y <= bypth) || ((tile == 0x55 || tile == 0x75) - && x >= bxmth - && x <= bxpth - && y >= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 + tfq) - && y <= bypth) + && x >= bxmth + && x <= bxpth + && y >= ((by as f32 * tf) + (x - bx as f32 * tf) / 2.0 + tfq) + && y <= bypth) || ((tile == 0x56 || tile == 0x76) - && x >= bxmth - && x <= bxpth - && y >= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 + tfq) - && y <= bypth) + && x >= bxmth + && x <= bxpth + && y >= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 + tfq) + && y <= bypth) || ((tile == 0x57 || tile == 0x77) - && x >= bxmth - && x <= bxpth - && y >= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 - tfq) - && y <= bypth) + && x >= bxmth + && x <= bxpth + && y >= ((by as f32 * tf) - (x - bx as f32 * tf) / 2.0 - tfq) + && y <= bypth) { continue 'ray; } @@ -501,14 +501,14 @@ impl GameScene { for npc in self.npc_list.iter_alive() { if npc.x < (self.frame.x - 128 * 0x200 - npc.display_bounds.width() as i32 * 0x200) || npc.x - > (self.frame.x - + 128 * 0x200 - + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) - && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) + > (self.frame.x + + 128 * 0x200 + + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) + && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) || npc.y - > (self.frame.y - + 128 * 0x200 - + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200) + > (self.frame.y + + 128 * 0x200 + + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200) { continue; } @@ -520,7 +520,7 @@ impl GameScene { let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "builtin/lightmap/spot")?; 'cc: for (player, inv) in - [(&self.player1, &self.inventory_player1), (&self.player2, &self.inventory_player2)].iter() + [(&self.player1, &self.inventory_player1), (&self.player2, &self.inventory_player2)].iter() { if player.cond.alive() && !player.cond.hidden() && inv.get_current_weapon().is_some() { if state.settings.light_cone { @@ -615,15 +615,15 @@ impl GameScene { for npc in self.npc_list.iter_alive() { if npc.cond.hidden() || (npc.x < (self.frame.x - 128 * 0x200 - npc.display_bounds.width() as i32 * 0x200) - || npc.x - > (self.frame.x - + 128 * 0x200 - + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) - && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) - || npc.y - > (self.frame.y - + 128 * 0x200 - + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200)) + || npc.x + > (self.frame.x + + 128 * 0x200 + + (state.canvas_size.0 as i32 + npc.display_bounds.width() as i32) * 0x200) + && npc.y < (self.frame.y - 128 * 0x200 - npc.display_bounds.height() as i32 * 0x200) + || npc.y + > (self.frame.y + + 128 * 0x200 + + (state.canvas_size.1 as i32 + npc.display_bounds.height() as i32) * 0x200)) { continue; } @@ -1236,10 +1236,10 @@ impl GameScene { && (npc.y - npc.hit_bounds.top as i32) < (bullet.y + bullet.enemy_hit_height as i32) && (npc.y + npc.hit_bounds.bottom as i32) > (bullet.y - bullet.enemy_hit_height as i32)) || (npc.npc_flags.invulnerable() - && (npc.x - npc.hit_bounds.right as i32) < (bullet.x + bullet.hit_bounds.right as i32) - && (npc.x + npc.hit_bounds.right as i32) > (bullet.x - bullet.hit_bounds.left as i32) - && (npc.y - npc.hit_bounds.top as i32) < (bullet.y + bullet.hit_bounds.bottom as i32) - && (npc.y + npc.hit_bounds.bottom as i32) > (bullet.y - bullet.hit_bounds.top as i32)); + && (npc.x - npc.hit_bounds.right as i32) < (bullet.x + bullet.hit_bounds.right as i32) + && (npc.x + npc.hit_bounds.right as i32) > (bullet.x - bullet.hit_bounds.left as i32) + && (npc.y - npc.hit_bounds.top as i32) < (bullet.y + bullet.hit_bounds.bottom as i32) + && (npc.y + npc.hit_bounds.bottom as i32) > (bullet.y - bullet.hit_bounds.top as i32)); if !hit { continue; @@ -1544,10 +1544,10 @@ impl GameScene { ) -> GameResult { if entity.x() < (self.frame.x - 128 - entity.display_bounds().width() as i32 * 0x200) || entity.x() - > (self.frame.x + 128 + (state.canvas_size.0 as i32 + entity.display_bounds().width() as i32) * 0x200) - && entity.y() < (self.frame.y - 128 - entity.display_bounds().height() as i32 * 0x200) + > (self.frame.x + 128 + (state.canvas_size.0 as i32 + entity.display_bounds().width() as i32) * 0x200) + && entity.y() < (self.frame.y - 128 - entity.display_bounds().height() as i32 * 0x200) || entity.y() - > (self.frame.y + 128 + (state.canvas_size.1 as i32 + entity.display_bounds().height() as i32) * 0x200) + > (self.frame.y + 128 + (state.canvas_size.1 as i32 + entity.display_bounds().height() as i32) * 0x200) { return Ok(()); } @@ -1653,7 +1653,7 @@ impl Scene for GameScene { state.textscript_vm.suspend = false; state.tile_size = self.stage.map.tile_size; #[cfg(feature = "scripting-lua")] - state.lua.set_game_scene(self as *mut _); + state.lua.set_game_scene(self as *mut _); self.player1.controller = state.settings.create_player1_controller(); self.player2.controller = state.settings.create_player2_controller(); @@ -1702,24 +1702,24 @@ impl Scene for GameScene { _ if self.intro_mode => LightingMode::None, _ if !state.constants.is_switch && (self.stage.data.background_type == BackgroundType::Black - || self.stage.data.background.name() == "bkBlack") => - { - LightingMode::Ambient - } + || self.stage.data.background.name() == "bkBlack") => + { + LightingMode::Ambient + } _ if state.constants.is_switch && (self.stage.data.background_type == BackgroundType::Black - || self.stage.data.background.name() == "bkBlack") => - { - LightingMode::None - } + || self.stage.data.background.name() == "bkBlack") => + { + LightingMode::None + } _ if self.stage.data.background.name() == "bkFall" => LightingMode::None, _ if self.stage.data.background_type != BackgroundType::Black && self.stage.data.background_type != BackgroundType::Outside && self.stage.data.background_type != BackgroundType::OutsideWind && self.stage.data.background.name() != "bkBlack" => - { - LightingMode::BackgroundOnly - } + { + LightingMode::BackgroundOnly + } _ => LightingMode::None, }; @@ -1795,31 +1795,31 @@ impl Scene for GameScene { | TextScriptExecutionState::Msg(_, _, _, _) | TextScriptExecutionState::MsgNewLine(_, _, _, _, _) | TextScriptExecutionState::FallingIsland(_, _, _, _, _, _) - if !state.control_flags.control_enabled() => - { - state.touch_controls.control_type = TouchControlType::Dialog; - match state.settings.cutscene_skip_mode { - CutsceneSkipMode::Hold if !state.textscript_vm.flags.cutscene_skip() => { - if self.player1.controller.skip() { - self.skip_counter += 1; - if self.skip_counter >= CUTSCENE_SKIP_WAIT { - state.textscript_vm.flags.set_cutscene_skip(true); - state.tutorial_counter = 0; + if !state.control_flags.control_enabled() => + { + state.touch_controls.control_type = TouchControlType::Dialog; + match state.settings.cutscene_skip_mode { + CutsceneSkipMode::Hold if !state.textscript_vm.flags.cutscene_skip() => { + if self.player1.controller.skip() { + self.skip_counter += 1; + if self.skip_counter >= CUTSCENE_SKIP_WAIT { + state.textscript_vm.flags.set_cutscene_skip(true); + state.tutorial_counter = 0; + } + } else if self.skip_counter > 0 { + self.skip_counter -= 1; } - } else if self.skip_counter > 0 { - self.skip_counter -= 1; } - } - CutsceneSkipMode::FastForward => { - if self.player1.controller.skip() { - state.textscript_vm.flags.set_cutscene_skip(true); - } else { - state.textscript_vm.flags.set_cutscene_skip(false); + CutsceneSkipMode::FastForward => { + if self.player1.controller.skip() { + state.textscript_vm.flags.set_cutscene_skip(true); + } else { + state.textscript_vm.flags.set_cutscene_skip(false); + } } + _ => (), } - _ => (), } - } _ => { self.skip_counter = 0; } @@ -1864,7 +1864,7 @@ impl Scene for GameScene { self.text_boxes.tick(state, ())?; #[cfg(feature = "scripting-lua")] - state.lua.scene_tick(); + state.lua.scene_tick(); if state.control_flags.tick_world() { self.tick = self.tick.wrapping_add(1); @@ -1938,13 +1938,13 @@ impl Scene for GameScene { self.inventory_dim += 0.1 * if state.textscript_vm.mode == ScriptMode::Inventory - || state.textscript_vm.state == TextScriptExecutionState::MapSystem - || self.pause_menu.is_paused() - { - state.frame_time as f32 - } else { - -(state.frame_time as f32) - }; + || state.textscript_vm.state == TextScriptExecutionState::MapSystem + || self.pause_menu.is_paused() + { + state.frame_time as f32 + } else { + -(state.frame_time as f32) + }; self.inventory_dim = self.inventory_dim.clamp(0.0, 1.0); self.background.draw_tick()?; @@ -2060,8 +2060,8 @@ impl Scene for GameScene { } else if self.player2.y - 0x1000 > self.frame.y + state.canvas_size.1 as i32 * 0x200 { let scale = 1.0 + (self.player2.y as f32 / (self.frame.y as f32 + state.canvas_size.1 * 0x200 as f32) - - 0.5) - .clamp(0.0, 2.0); + - 0.5) + .clamp(0.0, 2.0); let x = interpolate_fix9_scale( self.player2.prev_x - self.frame.prev_x, @@ -2132,8 +2132,8 @@ impl Scene for GameScene { } else if self.player2.x - 0x1000 > self.frame.x + state.canvas_size.0 as i32 * 0x200 { let scale = 1.0 + (self.player2.x as f32 / (self.frame.x as f32 + state.canvas_size.0 * 0x200 as f32) - - 0.5) - .clamp(0.0, 2.0); + - 0.5) + .clamp(0.0, 2.0); let y = interpolate_fix9_scale( self.player2.prev_y - self.frame.prev_y, diff --git a/src/scene/jukebox_scene.rs b/src/scene/jukebox_scene.rs index 757689a..6b4ed32 100644 --- a/src/scene/jukebox_scene.rs +++ b/src/scene/jukebox_scene.rs @@ -3,17 +3,18 @@ use itertools::Itertools; use crate::common::Color; use crate::common::Rect; use crate::components::background::Background; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::filesystem; +use crate::game::frame::Frame; +use crate::game::map::Map; +use crate::game::settings::ControllerType; +use crate::game::shared_game_state::{SharedGameState, TileSize}; +use crate::game::stage::{BackgroundType, NpcType, Stage, StageData, StageTexturePaths, Tileset}; use crate::input::combined_menu_controller::CombinedMenuController; -use crate::map::Map; -use crate::scene::title_scene::TitleScene; use crate::scene::Scene; -use crate::settings::ControllerType; -use crate::shared_game_state::{SharedGameState, TileSize}; -use crate::stage::{BackgroundType, NpcType, Stage, StageData, StageTexturePaths, Tileset}; +use crate::scene::title_scene::TitleScene; + pub struct JukeboxScene { selected_song: u16, song_list: Vec, @@ -38,7 +39,7 @@ impl JukeboxScene { boss_no: 0, tileset: Tileset { name: "0".to_string() }, pxpack_data: None, - background: crate::stage::Background::new("bkMoon"), + background: crate::game::stage::Background::new("bkMoon"), background_type: BackgroundType::Outside, background_color: Color { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, npc1: NpcType::new("0"), @@ -113,16 +114,16 @@ impl Scene for JukeboxScene { let mut song = self.selected_song as i16 + if self.controller.trigger_right() { - 1 - } else if self.controller.trigger_left() { - -1 - } else if self.controller.trigger_down() { - 8 - } else if self.controller.trigger_up() { - -8 - } else { - 0 - }; + 1 + } else if self.controller.trigger_left() { + -1 + } else if self.controller.trigger_down() { + 8 + } else if self.controller.trigger_up() { + -8 + } else { + 0 + }; if song < 0 { song += self.song_list.len() as i16; diff --git a/src/scene/loading_scene.rs b/src/scene/loading_scene.rs index 5c19904..a8feb90 100644 --- a/src/scene/loading_scene.rs +++ b/src/scene/loading_scene.rs @@ -1,9 +1,9 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; -use crate::graphics; +use crate::framework::graphics; +use crate::game::shared_game_state::SharedGameState; use crate::scene::no_data_scene::NoDataScene; use crate::scene::Scene; -use crate::shared_game_state::SharedGameState; pub struct LoadingScene { tick: usize, diff --git a/src/scene/mod.rs b/src/scene/mod.rs index 4943159..838b121 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -2,7 +2,7 @@ use crate::framework::context::Context; use crate::framework::error::GameResult; use crate::framework::keyboard::ScanCode; use crate::framework::ui::Components; -use crate::shared_game_state::SharedGameState; +use crate::game::shared_game_state::SharedGameState; #[cfg(feature = "editor")] pub mod editor_scene; diff --git a/src/scene/no_data_scene.rs b/src/scene/no_data_scene.rs index 8f47f2c..993c96d 100644 --- a/src/scene/no_data_scene.rs +++ b/src/scene/no_data_scene.rs @@ -1,7 +1,7 @@ use crate::framework::context::Context; use crate::framework::error::{GameError, GameResult}; +use crate::game::shared_game_state::SharedGameState; use crate::scene::Scene; -use crate::shared_game_state::SharedGameState; pub struct NoDataScene { #[cfg(target_os = "android")] @@ -26,23 +26,23 @@ impl Scene for NoDataScene { #[allow(unused)] fn tick(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { #[cfg(target_os = "android")] - { - use crate::common::Rect; + { + use crate::common::Rect; - if !self.flag { - self.flag = true; - let _ = std::fs::create_dir("/sdcard/doukutsu/"); - let _ = std::fs::write("/sdcard/doukutsu/extract game data here.txt", REL_URL); - let _ = std::fs::write("/sdcard/doukutsu/.nomedia", b""); - } + if !self.flag { + self.flag = true; + let _ = std::fs::create_dir("/sdcard/doukutsu/"); + let _ = std::fs::write("/sdcard/doukutsu/extract game data here.txt", REL_URL); + let _ = std::fs::write("/sdcard/doukutsu/.nomedia", b""); + } - let screen = Rect::new(0, 0, state.canvas_size.0 as isize, state.canvas_size.1 as isize); - if state.touch_controls.consume_click_in(screen) { - if let Err(err) = webbrowser::open(REL_URL) { - self.err = err.to_string(); + let screen = Rect::new(0, 0, state.canvas_size.0 as isize, state.canvas_size.1 as isize); + if state.touch_controls.consume_click_in(screen) { + if let Err(err) = webbrowser::open(REL_URL) { + self.err = err.to_string(); + } } } - } Ok(()) } @@ -76,43 +76,43 @@ impl Scene for NoDataScene { } #[cfg(target_os = "android")] - { - let ftl = "It's likely that you haven't extracted the game data properly."; - let ftl2 = "Click here to open the guide."; - let ftl_width = state.font.text_width(ftl.chars().clone(), &state.constants); - let ftl2_width = state.font.text_width(ftl2.chars().clone(), &state.constants); - let ftl3_width = state.font.text_width(REL_URL.chars().clone(), &state.constants); + { + let ftl = "It's likely that you haven't extracted the game data properly."; + let ftl2 = "Click here to open the guide."; + let ftl_width = state.font.text_width(ftl.chars().clone(), &state.constants); + let ftl2_width = state.font.text_width(ftl2.chars().clone(), &state.constants); + let ftl3_width = state.font.text_width(REL_URL.chars().clone(), &state.constants); - state.font.draw_colored_text( - ftl.chars(), - (state.canvas_size.0 - ftl_width) / 2.0, - 60.0, - (255, 255, 0, 255), - &state.constants, - &mut state.texture_set, - ctx, - )?; + state.font.draw_colored_text( + ftl.chars(), + (state.canvas_size.0 - ftl_width) / 2.0, + 60.0, + (255, 255, 0, 255), + &state.constants, + &mut state.texture_set, + ctx, + )?; - state.font.draw_colored_text( - ftl2.chars(), - (state.canvas_size.0 - ftl2_width) / 2.0, - 80.0, - (255, 255, 0, 255), - &state.constants, - &mut state.texture_set, - ctx, - )?; + state.font.draw_colored_text( + ftl2.chars(), + (state.canvas_size.0 - ftl2_width) / 2.0, + 80.0, + (255, 255, 0, 255), + &state.constants, + &mut state.texture_set, + ctx, + )?; - state.font.draw_colored_text( - REL_URL.chars(), - (state.canvas_size.0 - ftl3_width) / 2.0, - 100.0, - (255, 255, 0, 255), - &state.constants, - &mut state.texture_set, - ctx, - )?; - } + state.font.draw_colored_text( + REL_URL.chars(), + (state.canvas_size.0 - ftl3_width) / 2.0, + 100.0, + (255, 255, 0, 255), + &state.constants, + &mut state.texture_set, + ctx, + )?; + } { let err_width = state.font.text_width(self.err.chars().clone(), &state.constants); diff --git a/src/scene/title_scene.rs b/src/scene/title_scene.rs index 1670880..73e2cff 100644 --- a/src/scene/title_scene.rs +++ b/src/scene/title_scene.rs @@ -2,22 +2,22 @@ use crate::common::{Color, VERSION_BANNER}; use crate::components::background::Background; use crate::components::nikumaru::NikumaruCounter; use crate::entity::GameEntity; -use crate::frame::Frame; use crate::framework::context::Context; use crate::framework::error::GameResult; +use crate::game::frame::Frame; +use crate::game::map::Map; +use crate::game::shared_game_state::{ + GameDifficulty, MenuCharacter, ReplayKind, ReplayState, Season, SharedGameState, TileSize, +}; +use crate::game::stage::{BackgroundType, NpcType, Stage, StageData, StageTexturePaths, Tileset}; use crate::input::combined_menu_controller::CombinedMenuController; use crate::input::touch_controls::TouchControlType; -use crate::map::Map; +use crate::menu::{Menu, MenuEntry, MenuSelectionResult}; use crate::menu::coop_menu::PlayerCountMenu; use crate::menu::save_select_menu::SaveSelectMenu; use crate::menu::settings_menu::SettingsMenu; -use crate::menu::{Menu, MenuEntry, MenuSelectionResult}; use crate::scene::jukebox_scene::JukeboxScene; use crate::scene::Scene; -use crate::shared_game_state::{ - GameDifficulty, MenuCharacter, ReplayKind, ReplayState, Season, SharedGameState, TileSize, -}; -use crate::stage::{BackgroundType, NpcType, Stage, StageData, StageTexturePaths, Tileset}; #[derive(PartialEq, Eq, Copy, Clone)] #[repr(u8)] @@ -102,7 +102,7 @@ impl TitleScene { boss_no: 0, tileset: Tileset { name: "0".to_string() }, pxpack_data: None, - background: crate::stage::Background::new("bkMoon"), + background: crate::game::stage::Background::new("bkMoon"), background_type: BackgroundType::Outside, background_color: Color { r: 0.0, g: 0.0, b: 0.0, a: 0.0 }, npc1: NpcType::new("0"), @@ -184,7 +184,8 @@ impl TitleScene { } } -static COPYRIGHT_PIXEL: &str = "2004.12 Studio Pixel"; // Freeware +static COPYRIGHT_PIXEL: &str = "2004.12 Studio Pixel"; +// Freeware static COPYRIGHT_NICALIS: &str = "@2022 NICALIS INC."; // Nicalis font uses @ for copyright impl Scene for TitleScene { @@ -303,10 +304,10 @@ impl Scene for TitleScene { MenuSelectionResult::Selected(MainMenuEntry::Editor, _) => { // this comment is just there because rustfmt removes parenthesis around the match case and breaks compilation #[cfg(feature = "editor")] - { - use crate::scene::editor_scene::EditorScene; - state.next_scene = Some(Box::new(EditorScene::new())); - } + { + use crate::scene::editor_scene::EditorScene; + state.next_scene = Some(Box::new(EditorScene::new())); + } } MenuSelectionResult::Selected(MainMenuEntry::Jukebox, _) => { state.next_scene = Some(Box::new(JukeboxScene::new())); @@ -459,11 +460,11 @@ impl Scene for TitleScene { batch.draw(ctx)?; } else { let window_title = match self.current_menu { - CurrentMenu::ChallengesMenu => (state.t("menus.main_menu.challenges")), - CurrentMenu::ChallengeConfirmMenu | CurrentMenu::SaveSelectMenu => (state.t("menus.main_menu.start")), - CurrentMenu::OptionMenu => (state.t("menus.main_menu.options")), + CurrentMenu::ChallengesMenu => state.t("menus.main_menu.challenges"), + CurrentMenu::ChallengeConfirmMenu | CurrentMenu::SaveSelectMenu => state.t("menus.main_menu.start"), + CurrentMenu::OptionMenu => state.t("menus.main_menu.options"), CurrentMenu::MainMenu => unreachable!(), - CurrentMenu::PlayerCountMenu => (state.t("menus.main_menu.start")), + CurrentMenu::PlayerCountMenu => state.t("menus.main_menu.start"), }; state.font.draw_colored_text_with_shadow_scaled( window_title.chars(), diff --git a/src/scripting/lua/tsconfig.json b/src/scripting/lua/tsconfig.json deleted file mode 100644 index 99b6719..0000000 --- a/src/scripting/lua/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "files": [ - "doukutsu.d.ts" - ], - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "lib": [ - "es2018" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "baseUrl": "./", - "typeRoots": [ - "./" - ], - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true - } -} diff --git a/src/shaders.rs b/src/shaders.rs deleted file mode 100644 index 11f0130..0000000 --- a/src/shaders.rs +++ /dev/null @@ -1,39 +0,0 @@ -use gfx::{self, *}; - -use crate::framework::context::Context; -use crate::framework::error::GameResult; - -gfx_defines! { - constant WaterShaderParams { - resolution: [f32; 2] = "u_Resolution", - frame_pos: [f32; 2] = "u_FramePos", - t: f32 = "u_Tick", - } -} - -pub struct Shaders { - //pub water_shader: Shader, - pub water_shader_params: WaterShaderParams, -} - -impl Shaders { - pub fn new(ctx: &mut Context) -> GameResult { - let water_shader_params = WaterShaderParams { - t: 0.0, - resolution: [0.0, 0.0], - frame_pos: [0.0, 0.0], - }; - - Ok(Shaders { - /*water_shader: Shader::new( - ctx, - "/builtin/shaders/basic_es300.vert.glsl", - "/builtin/shaders/water_es300.frag.glsl", - water_shader_params, - "WaterShaderParams", - None, - )?,*/ - water_shader_params, - }) - } -} diff --git a/src/sound/mod.rs b/src/sound/mod.rs index 84a9acc..8e42d8e 100644 --- a/src/sound/mod.rs +++ b/src/sound/mod.rs @@ -4,19 +4,19 @@ use std::str::FromStr; use std::sync::mpsc; use std::sync::mpsc::{Receiver, Sender}; -use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use cpal::Sample; +use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; #[cfg(feature = "ogg-playback")] use lewton::inside_ogg::OggStreamReader; use num_traits::clamp; use crate::engine_constants::EngineConstants; use crate::framework::context::Context; -use crate::framework::error::GameError::{AudioError, InvalidValue}; use crate::framework::error::{GameError, GameResult}; +use crate::framework::error::GameError::{AudioError, InvalidValue}; use crate::framework::filesystem; use crate::framework::filesystem::File; -use crate::settings::Settings; +use crate::game::settings::Settings; #[cfg(feature = "ogg-playback")] use crate::sound::ogg_playback::{OggPlaybackEngine, SavedOggPlaybackState}; use crate::sound::org_playback::{OrgPlaybackEngine, SavedOrganyaPlaybackState}; @@ -274,19 +274,19 @@ impl SoundManager { paths.insert(0, "/Soundtracks/".to_owned() + &settings.soundtrack + "/"); if let Some(soundtrack) = - constants.soundtracks.iter().find(|s| s.available && s.name == settings.soundtrack) + constants.soundtracks.iter().find(|s| s.available && s.name == settings.soundtrack) { paths.insert(0, soundtrack.path.clone()); } let songs_paths = paths.iter().map(|prefix| { [ - #[cfg(feature = "ogg-playback")] + #[cfg(feature = "ogg-playback")] ( SongFormat::OggMultiPart, vec![format!("{}{}_intro.ogg", prefix, song_name), format!("{}{}_loop.ogg", prefix, song_name)], ), - #[cfg(feature = "ogg-playback")] + #[cfg(feature = "ogg-playback")] (SongFormat::OggSinglePart, vec![format!("{}{}.ogg", prefix, song_name)]), (SongFormat::Organya, vec![format!("{}{}.org", prefix, song_name)]), ] @@ -294,7 +294,7 @@ impl SoundManager { for songs in songs_paths { for (format, paths) in - songs.iter().filter(|(_, paths)| paths.iter().all(|path| filesystem::exists(ctx, path))) + songs.iter().filter(|(_, paths)| paths.iter().all(|path| filesystem::exists(ctx, path))) { match format { SongFormat::Organya => { @@ -372,7 +372,7 @@ impl SoundManager { Box::new(song_intro), Box::new(song_loop), )) - .unwrap(); + .unwrap(); return Ok(()); } @@ -583,8 +583,8 @@ fn run( device: cpal::Device, config: cpal::StreamConfig, ) -> GameResult -where - T: cpal::Sample, + where + T: cpal::Sample, { let sample_rate = config.sample_rate.0 as f32; let channels = config.channels as usize; @@ -593,17 +593,17 @@ where let mut speed = 1.0; let mut org_engine = Box::new(OrgPlaybackEngine::new()); #[cfg(feature = "ogg-playback")] - let mut ogg_engine = Box::new(OggPlaybackEngine::new()); + let mut ogg_engine = Box::new(OggPlaybackEngine::new()); let mut pixtone = Box::new(PixTonePlayback::new()); pixtone.create_samples(); log::info!("Audio format: {} {}", sample_rate, channels); org_engine.set_sample_rate(sample_rate as usize); #[cfg(feature = "ogg-playback")] - { - org_engine.loops = usize::MAX; - ogg_engine.set_sample_rate(sample_rate as usize); - } + { + org_engine.loops = usize::MAX; + ogg_engine.set_sample_rate(sample_rate as usize); + } let buf_size = sample_rate as usize * 10 / 1000; let mut bgm_buf = vec![0x8080; buf_size * 2]; @@ -693,7 +693,7 @@ where assert!(new_speed > 0.0); speed = new_speed; #[cfg(feature = "ogg-playback")] - ogg_engine.set_sample_rate((sample_rate / new_speed) as usize); + ogg_engine.set_sample_rate((sample_rate / new_speed) as usize); org_engine.set_sample_rate((sample_rate / new_speed) as usize); } Ok(PlaybackMessage::SetSongVolume(new_volume)) => { diff --git a/src/sound/org_playback.rs b/src/sound/org_playback.rs index efeb37e..7ed63a5 100644 --- a/src/sound/org_playback.rs +++ b/src/sound/org_playback.rs @@ -4,11 +4,11 @@ use std::mem::MaybeUninit; use crate::sound::fir::FIR; use crate::sound::fir::FIR_STEP; +use crate::sound::InterpolationMode; use crate::sound::organya::{Song as Organya, Version}; use crate::sound::stuff::*; use crate::sound::wav::*; use crate::sound::wave_bank::SoundBank; -use crate::sound::InterpolationMode; #[derive(Clone)] pub struct FIRData { diff --git a/src/sound/wav.rs b/src/sound/wav.rs index 85a1f47..6689c6d 100644 --- a/src/sound/wav.rs +++ b/src/sound/wav.rs @@ -2,7 +2,7 @@ use std::fmt; use std::io; use std::io::ErrorKind; -use byteorder::{ReadBytesExt, LE}; +use byteorder::{LE, ReadBytesExt}; #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub struct RiffChunk { @@ -76,7 +76,7 @@ impl WavSample { b"RIFF" => {} b"RIFX" => return Err(io::Error::new(ErrorKind::InvalidData, "Cannot handle RIFX data!".to_owned())), _ => { - return Err(io::Error::new(ErrorKind::InvalidData, format!("Expected RIFF signature, found {}", riff))) + return Err(io::Error::new(ErrorKind::InvalidData, format!("Expected RIFF signature, found {}", riff))); } } diff --git a/src/util/bitvec.rs b/src/util/bitvec.rs new file mode 100644 index 0000000..f1c4620 --- /dev/null +++ b/src/util/bitvec.rs @@ -0,0 +1,93 @@ +pub struct BitVec { + bits: Vec, + len: usize, +} + +impl BitVec { + pub fn new() -> BitVec { + BitVec { bits: Vec::new(), len: 0 } + } + + pub fn with_capacity(capacity: usize) -> BitVec { + BitVec { bits: Vec::with_capacity(capacity), len: 0 } + } + + pub fn with_size(size: usize) -> BitVec { + let mut bits = Vec::with_capacity(size / 8 + 1); + for _ in 0..bits.capacity() { + bits.push(0); + } + + BitVec { bits, len: size } + } + + pub fn get(&self, index: usize) -> Option { + if index >= self.len { + None + } else { + unsafe { Some(*self.bits.get_unchecked(index / 8) & (1 << (index % 8)) != 0) } + } + } + + pub fn set(&mut self, index: usize, bit: bool) { + assert!(index < self.len); + if bit { + self.bits[index / 8] |= 1 << (index % 8); + } else { + self.bits[index / 8] &= !(1 << (index % 8)); + } + } + + pub fn resize(&mut self, new_size: usize) { + if new_size > self.len { + let new_capacity = new_size / 8 + 1; + if new_capacity > self.bits.capacity() { + self.bits.reserve(new_capacity - self.bits.capacity()); + } + for _ in 0..new_capacity - self.bits.len() { + self.bits.push(0); + } + } + self.len = new_size; + } + + pub fn len(&self) -> usize { + self.len + } + + pub fn capacity(&self) -> usize { + self.bits.capacity() * 8 + } + + pub fn iter(&self) -> BitVecIter { + BitVecIter { bitvec: self, index: 0 } + } + + pub fn copy_to_slice(&self, slice: &mut [u8]) -> usize { + let count = std::cmp::min(self.len / 8, slice.len()); + for i in 0..count { + slice[i] = self.bits[i]; + } + + count + } +} + +pub struct BitVecIter<'a> { + bitvec: &'a BitVec, + index: usize, +} + +impl<'a> Iterator for BitVecIter<'a> { + type Item = bool; + + fn next(&mut self) -> Option { + if self.index >= self.bitvec.len { + None + } else { + let bit = self.bitvec.get(self.index).unwrap(); + self.index += 1; + Some(bit) + } + } +} diff --git a/src/encoding.rs b/src/util/encoding.rs similarity index 99% rename from src/encoding.rs rename to src/util/encoding.rs index aacbfc7..b549044 100644 --- a/src/encoding.rs +++ b/src/util/encoding.rs @@ -4,7 +4,7 @@ use byteorder::ReadBytesExt; /// Decodes UTF-8 character in a less strict way. /// http://simonsapin.github.io/wtf-8/#decoding-wtf-8 -pub fn read_cur_wtf8>(cursor: &mut Cursor, max_bytes: u32) -> (u32, char) { +pub fn read_cur_wtf8>(cursor: &mut Cursor, max_bytes: u32) -> (u32, char) { let result: u32; let consumed: u32; diff --git a/src/util/mod.rs b/src/util/mod.rs new file mode 100644 index 0000000..66084cd --- /dev/null +++ b/src/util/mod.rs @@ -0,0 +1,3 @@ +pub mod bitvec; +pub mod encoding; +pub mod rng; diff --git a/src/rng.rs b/src/util/rng.rs similarity index 98% rename from src/rng.rs rename to src/util/rng.rs index 06a3bb6..a9f58ef 100644 --- a/src/rng.rs +++ b/src/util/rng.rs @@ -1,5 +1,5 @@ use std::cell::Cell; -use std::ops::{Range}; +use std::ops::Range; pub trait RNG { fn next(&self) -> i32; diff --git a/src/vanilla.rs b/src/vanilla.rs deleted file mode 100644 index 24d24c5..0000000 --- a/src/vanilla.rs +++ /dev/null @@ -1,209 +0,0 @@ -use std::{ - env, - io::{Read, Write}, - ops::Range, - path::PathBuf, -}; - -use byteorder::{WriteBytesExt, LE}; - -use crate::{ - exe_parser::ExeParser, - framework::{ - context::Context, - error::{GameError::ParseError, GameResult}, - filesystem, - }, -}; - -pub struct VanillaExtractor { - exe_buffer: Vec, - data_base_dir: String, -} - -const VANILLA_STAGE_COUNT: u32 = 95; -const VANILLA_STAGE_ENTRY_SIZE: u32 = 0xC8; -const VANILLA_STAGE_OFFSET: u32 = 0x937B0; -const VANILLA_STAGE_TABLE_SIZE: u32 = VANILLA_STAGE_COUNT * VANILLA_STAGE_ENTRY_SIZE; - -impl VanillaExtractor { - pub fn from(ctx: &mut Context, exe_name: String, data_base_dir: String) -> Option { - let mut vanilla_exe_path = env::current_exe().unwrap(); - vanilla_exe_path.pop(); - vanilla_exe_path.push(exe_name); - - if !vanilla_exe_path.is_file() { - return None; - } - - log::info!("Found vanilla game executable, attempting to extract resources."); - - if filesystem::exists(ctx, format!("{}/stage.sect", data_base_dir.clone())) { - log::info!("Vanilla resources are already extracted, not proceeding."); - return None; - } - - let file = std::fs::File::open(vanilla_exe_path); - if file.is_err() { - log::error!("Failed to open vanilla game executable: {}", file.unwrap_err()); - return None; - } - - let mut exe_buffer = Vec::new(); - let result = file.unwrap().read_to_end(&mut exe_buffer); - if result.is_err() { - log::error!("Failed to read vanilla game executable: {}", result.unwrap_err()); - return None; - } - - Some(Self { exe_buffer, data_base_dir }) - } - - pub fn extract_data(&self) -> GameResult { - let parser = ExeParser::from(&self.exe_buffer); - if parser.is_err() { - return Err(ParseError("Failed to create vanilla parser.".to_string())); - } - - let parser = parser.unwrap(); - - self.extract_organya(&parser)?; - self.extract_bitmaps(&parser)?; - self.extract_stage_table(&parser)?; - - Ok(()) - } - - fn deep_create_dir_if_not_exists(&self, path: PathBuf) -> GameResult { - if path.is_dir() { - return Ok(()); - } - - let result = std::fs::create_dir_all(path); - if result.is_err() { - return Err(ParseError(format!("Failed to create directory structure: {}", result.unwrap_err()))); - } - - Ok(()) - } - - fn extract_organya(&self, parser: &ExeParser) -> GameResult { - let orgs = parser.get_resource_dir("ORG".to_string()); - - if orgs.is_err() { - return Err(ParseError("Failed to retrieve Organya resource directory.".to_string())); - } - - for org in orgs.unwrap().data_files { - let mut org_path = env::current_exe().unwrap(); - org_path.pop(); - org_path.push(self.data_base_dir.clone()); - org_path.push("Org/"); - - if self.deep_create_dir_if_not_exists(org_path.clone()).is_err() { - return Err(ParseError("Failed to create directory structure.".to_string())); - } - - org_path.push(format!("{}.org", org.name)); - - let mut org_file = match std::fs::File::create(org_path) { - Ok(file) => file, - Err(_) => { - return Err(ParseError("Failed to create organya file.".to_string())); - } - }; - - let result = org_file.write_all(&org.bytes); - if result.is_err() { - return Err(ParseError("Failed to write organya file.".to_string())); - } - - log::info!("Extracted organya file: {}", org.name); - } - - Ok(()) - } - - fn extract_bitmaps(&self, parser: &ExeParser) -> GameResult { - let bitmaps = parser.get_bitmap_dir(); - - if bitmaps.is_err() { - return Err(ParseError("Failed to retrieve bitmap directory.".to_string())); - } - - for bitmap in bitmaps.unwrap().data_files { - let mut data_path = env::current_exe().unwrap(); - data_path.pop(); - data_path.push(self.data_base_dir.clone()); - - if self.deep_create_dir_if_not_exists(data_path.clone()).is_err() { - return Err(ParseError("Failed to create data directory structure.".to_string())); - } - - data_path.push(format!("{}.pbm", bitmap.name)); - - let file = std::fs::File::create(data_path); - if file.is_err() { - return Err(ParseError("Failed to create bitmap file.".to_string())); - } - - let mut file = file.unwrap(); - - file.write_u8(0x42)?; // B - file.write_u8(0x4D)?; // M - file.write_u32::(bitmap.bytes.len() as u32 + 0xE)?; // Size of BMP file - file.write_u32::(0)?; // unused null bytes - file.write_u32::(0x76)?; // Bitmap data offset (hardcoded for now, might wanna get the actual offset) - - let result = file.write_all(&bitmap.bytes); - if result.is_err() { - return Err(ParseError("Failed to write bitmap file.".to_string())); - } - - log::info!("Extracted bitmap file: {}", bitmap.name); - } - - Ok(()) - } - - fn extract_stage_table(&self, parser: &ExeParser) -> GameResult { - let range = parser.get_named_section_byte_range(".csmap".to_string()); - if range.is_err() { - return Err(ParseError("Failed to retrieve stage table from executable.".to_string())); - } - - let range = match range.unwrap() { - Some(range) => range, - None => Range { start: VANILLA_STAGE_OFFSET, end: VANILLA_STAGE_OFFSET + VANILLA_STAGE_TABLE_SIZE }, - }; - - let start = range.start as usize; - let end = range.end as usize; - - let byte_slice = &self.exe_buffer[start..end]; - - let mut stage_tbl_path = env::current_exe().unwrap(); - stage_tbl_path.pop(); - stage_tbl_path.push(self.data_base_dir.clone()); - - if self.deep_create_dir_if_not_exists(stage_tbl_path.clone()).is_err() { - return Err(ParseError("Failed to create data directory structure.".to_string())); - } - - stage_tbl_path.push("stage.sect"); - - let mut stage_tbl_file = match std::fs::File::create(stage_tbl_path) { - Ok(file) => file, - Err(_) => { - return Err(ParseError("Failed to create stage table file.".to_string())); - } - }; - - let result = stage_tbl_file.write_all(byte_slice); - if result.is_err() { - return Err(ParseError("Failed to write to stage table file.".to_string())); - } - - Ok(()) - } -}