mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
fix: stop game data being served by another game's file
This commit is contained in:
1 parent
36ed9b5b0d
commit
f2336161bb
14 files changed
+904
No files matched your search
@@ -0,0 +1,319 @@
|
||||
# VICE keyboard mapping file
|
||||
#
|
||||
# A Keyboard map is read in as patch to the current map.
|
||||
#
|
||||
# File format:
|
||||
# - comment lines start with '#'
|
||||
# - keyword lines start with '!keyword'
|
||||
# - normal lines have 'keysym/scancode row column shiftflag'
|
||||
#
|
||||
# Keywords and their lines are:
|
||||
# '!CLEAR' clear whole table
|
||||
# '!INCLUDE filename' read file as mapping file
|
||||
# '!LSHIFT row col' left shift keyboard row/column
|
||||
# '!RSHIFT row col' right shift keyboard row/column
|
||||
# '!VSHIFT shiftkey' virtual shift key (RSHIFT or LSHIFT)
|
||||
# '!SHIFTL shiftkey' shift lock key (RSHIFT or LSHIFT)
|
||||
# for emulated keyboards that have only one shift key, set both LSHIFT
|
||||
# and RSHIFT to the same row/col and use RSHIFT for VSHIFT and SHIFTL.
|
||||
# '!LCTRL row col' left control keyboard row/column
|
||||
# '!VCTRL ctrlkey' virtual control key (LCTRL)
|
||||
# '!LCBM row col' left CBM keyboard row/column
|
||||
# '!VCBM cbmkey' virtual CBM key (LCBM)
|
||||
# '!UNDEF keysym' remove keysym from table
|
||||
#
|
||||
# Shiftflag can have these values, flags can be ORed to combine them:
|
||||
# 0x0000 0 key is not shifted for this keysym/scancode
|
||||
# 0x0001 1 key is combined with shift for this keysym/scancode
|
||||
# 0x0002 2 key is left shift on emulated machine
|
||||
# 0x0004 4 key is right shift on emulated machine (use only this one
|
||||
# for emulated keyboards that have only one shift key)
|
||||
# 0x0008 8 key can be shifted or not with this keysym/scancode
|
||||
# 0x0010 16 deshift key for this keysym/scancode
|
||||
# 0x0020 32 another definition for this keysym/scancode follows
|
||||
# 0x0040 64 key is shift-lock on emulated machine
|
||||
# 0x0080 128 shift modifier required on host
|
||||
# 0x0100 256 key is used for an alternative keyboard mapping, e.g. C64 mode in x128
|
||||
# 0x0200 512 alt-r (alt-gr) modifier required on host
|
||||
# 0x0400 1024 ctrl modifier required on host
|
||||
# 0x0800 2048 key is combined with cbm for this keysym/scancode
|
||||
# 0x1000 4096 key is combined with ctrl for this keysym/scancode
|
||||
# 0x2000 8192 key is (left) cbm on emulated machine
|
||||
# 0x4000 16384 key is (left) ctrl on emulated machine
|
||||
#
|
||||
# Negative row values:
|
||||
# 'keysym -1 n' joystick keymap A, direction n
|
||||
# 'keysym -2 n' joystick keymap B, direction n
|
||||
# 'keysym -3 0' first RESTORE key
|
||||
# 'keysym -3 1' second RESTORE key
|
||||
# 'keysym -4 0' 40/80 column key (x128)
|
||||
# 'keysym -4 1' CAPS (ASCII/DIN) key (x128)
|
||||
# 'keysym -5 n' joyport keypad, key n (not supported in x128)
|
||||
#
|
||||
# Joystick direction values:
|
||||
# 0 Fire
|
||||
# 1 South/West
|
||||
# 2 South
|
||||
# 3 South/East
|
||||
# 4 West
|
||||
# 5 East
|
||||
# 6 North/West
|
||||
# 7 North
|
||||
# 8 North/East
|
||||
#
|
||||
# Joyport keypad key layout:
|
||||
# --------------------------
|
||||
# | 0 | 1 | 2 | 3 | 4 |
|
||||
# --------------------------
|
||||
# | 5 | 6 | 7 | 8 | 9 |
|
||||
# --------------------------
|
||||
# | 10 | 11 | 12 | 13 | 14 |
|
||||
# --------------------------
|
||||
# | 15 | 16 | 17 | 18 | 19 |
|
||||
# --------------------------
|
||||
#
|
||||
# When a bigger spaced key is used,
|
||||
# it uses the upper left most key value.
|
||||
|
||||
# Symbolic Mapping, US Layout, C64, GTK
|
||||
|
||||
# C64 keyboard matrix:
|
||||
#
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 0|Bit 1|Bit 2|Bit 3|Bit 4|Bit 5|Bit 6|Bit 7|
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 0| DEL |Retrn|C_L/R| F7 | F1 | F3 | F5 |C_U/D|
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 1| 3 # | W | A | 4 $ | Z | S | E | S_L |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 2| 5 % | R | D | 6 & | C | F | T | X |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 3| 7 ' | Y | G | 8 ( | B | H | U | V |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 4| 9 ) | I | J | 0 | M | K | O | N |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 5| + | P | L | - | . > | : [ | @ | , < |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 6|POUND| * | ; ] | HOME| S_R | = | A_UP| / ? |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE| C= | Q | R/S |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
|
||||
# C64 Keyboard layout:
|
||||
#
|
||||
# arrow 1! 2" 3# 4$ 5% 6& 7' 8( 9) 0 + - pound clr del f1/f2
|
||||
# ctrl q w e r t y u i o p @ * ^ restore f3/f4
|
||||
# r/s SL a s d f g h j k l :[ ;] = return f5/f6
|
||||
# CBM LS z x c v b n m ,< .> /? RS u/d l/r f7/f8
|
||||
# space
|
||||
|
||||
!CLEAR
|
||||
!LSHIFT 1 7
|
||||
!RSHIFT 6 4
|
||||
!VSHIFT RSHIFT
|
||||
!SHIFTL LSHIFT
|
||||
!LCBM 7 5
|
||||
!VCBM LCBM
|
||||
!LCTRL 7 2
|
||||
!VCTRL LCTRL
|
||||
|
||||
#####################
|
||||
# |Bit 0| DEL |Retrn|C_L/R| F7 | F1 | F3 | F5 |C_U/D|
|
||||
|
||||
BackSpace 0 0 8
|
||||
Delete 0 0 8
|
||||
Insert 0 0 1
|
||||
Return 0 1 8
|
||||
Right 0 2 8
|
||||
KP_F4 0 2 8
|
||||
Left 0 2 1
|
||||
F7 0 3 8
|
||||
F8 0 3 1
|
||||
F1 0 4 8
|
||||
KP_F1 0 4 8
|
||||
F2 0 4 1
|
||||
KP_F2 0 5 8
|
||||
F3 0 5 8
|
||||
F4 0 5 1
|
||||
F5 0 6 8
|
||||
KP_F3 0 6 8
|
||||
F6 0 6 1
|
||||
Down 0 7 8
|
||||
Up 0 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 1| 3 # | W | A | 4 $ | Z | S | E | S_L |
|
||||
|
||||
numbersign 1 0 1
|
||||
dollar 1 3 1
|
||||
Shift_L 1 7 2
|
||||
# shift lock
|
||||
Caps_Lock 1 7 64
|
||||
|
||||
#####################
|
||||
# |Bit 2| 5 % | R | D | 6 & | C | F | T | X |
|
||||
|
||||
percent 2 0 1
|
||||
ampersand 2 3 1
|
||||
|
||||
#####################
|
||||
# |Bit 3| 7 ' | Y | G | 8 ( | B | H | U | V |
|
||||
|
||||
apostrophe 3 0 1
|
||||
grave 3 0 1
|
||||
parenleft 3 3 1
|
||||
|
||||
#####################
|
||||
# |Bit 4| 9 ) | I | J | 0 | M | K | O | N |
|
||||
|
||||
parenright 4 0 1
|
||||
|
||||
#####################
|
||||
# |Bit 5| + | P | L | - | . > | : [ | @ | , < |
|
||||
|
||||
plus 5 0 16
|
||||
minus 5 3 0
|
||||
period 5 4 0
|
||||
greater 5 4 1
|
||||
colon 5 5 16
|
||||
bracketleft 5 5 1
|
||||
at 5 6 16
|
||||
# underscore -> underscore (@+cbm)
|
||||
underscore 5 6 0x810
|
||||
comma 5 7 0
|
||||
less 5 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 6|POUND| * | ; ] | HOME| S_R | = | A_UP| / ? |
|
||||
|
||||
sterling 6 0 0
|
||||
backslash 6 0 0
|
||||
bar 6 0 8
|
||||
asterisk 6 1 16
|
||||
semicolon 6 2 0
|
||||
bracketright 6 2 1
|
||||
Home 6 3 8
|
||||
Shift_R 6 4 4
|
||||
equal 6 5 0
|
||||
# Page down -> Arrow Up
|
||||
asciicircum 6 6 16
|
||||
Page_Down 6 6 8
|
||||
slash 6 7 0
|
||||
question 6 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE| C= | Q | R/S |
|
||||
|
||||
exclam 7 0 1
|
||||
# tilde -> arrow left
|
||||
asciitilde 7 1 16
|
||||
End 7 1 0
|
||||
Control_L 7 2 16392 /* Control_L = CTRL */
|
||||
quotedbl 7 3 1
|
||||
space 7 4 8
|
||||
Tab 7 5 8200 /* Tab = CBM */
|
||||
ISO_Left_Tab 7 5 8200 /* Shift + Tab = CBM */
|
||||
Escape 7 7 8
|
||||
|
||||
#####################
|
||||
# letters and numbers
|
||||
|
||||
0 4 3 0
|
||||
1 7 0 0
|
||||
2 7 3 0
|
||||
3 1 0 0
|
||||
4 1 3 0
|
||||
5 2 0 0
|
||||
6 2 3 0
|
||||
7 3 0 0
|
||||
8 3 3 0
|
||||
9 4 0 0
|
||||
|
||||
A 1 2 8
|
||||
B 3 4 8
|
||||
C 2 4 8
|
||||
D 2 2 8
|
||||
E 1 6 8
|
||||
F 2 5 8
|
||||
G 3 2 8
|
||||
H 3 5 8
|
||||
I 4 1 8
|
||||
J 4 2 8
|
||||
K 4 5 8
|
||||
L 5 2 8
|
||||
M 4 4 8
|
||||
N 4 7 8
|
||||
O 4 6 8
|
||||
P 5 1 8
|
||||
Q 7 6 8
|
||||
R 2 1 8
|
||||
S 1 5 8
|
||||
T 2 6 8
|
||||
U 3 6 8
|
||||
V 3 7 8
|
||||
W 1 1 8
|
||||
X 2 7 8
|
||||
Y 3 1 8
|
||||
Z 1 4 8
|
||||
a 1 2 8
|
||||
b 3 4 8
|
||||
c 2 4 8
|
||||
d 2 2 8
|
||||
e 1 6 8
|
||||
f 2 5 8
|
||||
g 3 2 8
|
||||
h 3 5 8
|
||||
i 4 1 8
|
||||
j 4 2 8
|
||||
k 4 5 8
|
||||
l 5 2 8
|
||||
m 4 4 8
|
||||
n 4 7 8
|
||||
o 4 6 8
|
||||
p 5 1 8
|
||||
q 7 6 8
|
||||
r 2 1 8
|
||||
s 1 5 8
|
||||
t 2 6 8
|
||||
u 3 6 8
|
||||
v 3 7 8
|
||||
w 1 1 8
|
||||
x 2 7 8
|
||||
y 3 1 8
|
||||
z 1 4 8
|
||||
|
||||
# Restore key mappings
|
||||
Page_Up -3 0
|
||||
Prior -3 1
|
||||
|
||||
# Dead keys support for those using US-International keyboard layout.
|
||||
dead_acute 3 0 1 # '
|
||||
dead_grave 3 0 1 # '
|
||||
dead_circumflex 6 6 16 # A_UP
|
||||
dead_tilde 6 6 16 # A_UP
|
||||
dead_perispomeni 7 1 16 # Arrow Left
|
||||
dead_diaeresis 7 3 1 # "
|
||||
|
||||
#
|
||||
# joyport attached keypad
|
||||
#
|
||||
Num_Lock -5 0
|
||||
KP_7 -5 1
|
||||
KP_8 -5 2
|
||||
KP_9 -5 3
|
||||
KP_Divide -5 4
|
||||
Scroll_Lock -5 5
|
||||
KP_4 -5 6
|
||||
KP_5 -5 7
|
||||
KP_6 -5 8
|
||||
KP_Multiply -5 9
|
||||
Sys_Req -5 10
|
||||
KP_1 -5 11
|
||||
KP_2 -5 12
|
||||
KP_3 -5 13
|
||||
KP_Subtract -5 14
|
||||
Print -5 15
|
||||
KP_0 -5 16
|
||||
KP_Delete -5 17
|
||||
KP_Enter -5 18
|
||||
KP_Add -5 19
|
||||
@@ -0,0 +1,58 @@
|
||||
#
|
||||
# VICE Palette file
|
||||
#
|
||||
# Syntax:
|
||||
# Red Green Blue
|
||||
#
|
||||
# TYPE:VICII
|
||||
# NAME:Pepto (PAL)
|
||||
|
||||
# this palette was calculated for PAL according to http://www.pepto.de/projects/colorvic/
|
||||
|
||||
# Black
|
||||
00 00 00
|
||||
|
||||
# White
|
||||
FF FF FF
|
||||
|
||||
# Red
|
||||
68 37 2b
|
||||
|
||||
# Cyan
|
||||
70 a4 b2
|
||||
|
||||
# Purple
|
||||
6f 3d 86
|
||||
|
||||
# Green
|
||||
58 8d 43
|
||||
|
||||
# Blue
|
||||
35 28 79
|
||||
|
||||
# Yellow
|
||||
b8 c7 6f
|
||||
|
||||
# Orange
|
||||
6f 4f 25
|
||||
|
||||
# Brown
|
||||
43 39 00
|
||||
|
||||
# Light Red
|
||||
9a 67 59
|
||||
|
||||
# Dark Gray
|
||||
44 44 44
|
||||
|
||||
# Medium Gray
|
||||
6c 6c 6c
|
||||
|
||||
# Light Green
|
||||
9a d2 84
|
||||
|
||||
# Light Blue
|
||||
6c 5e b5
|
||||
|
||||
# Light Gray
|
||||
95 95 95
|
||||
@@ -0,0 +1,319 @@
|
||||
# VICE keyboard mapping file
|
||||
#
|
||||
# A Keyboard map is read in as patch to the current map.
|
||||
#
|
||||
# File format:
|
||||
# - comment lines start with '#'
|
||||
# - keyword lines start with '!keyword'
|
||||
# - normal lines have 'keysym/scancode row column shiftflag'
|
||||
#
|
||||
# Keywords and their lines are:
|
||||
# '!CLEAR' clear whole table
|
||||
# '!INCLUDE filename' read file as mapping file
|
||||
# '!LSHIFT row col' left shift keyboard row/column
|
||||
# '!RSHIFT row col' right shift keyboard row/column
|
||||
# '!VSHIFT shiftkey' virtual shift key (RSHIFT or LSHIFT)
|
||||
# '!SHIFTL shiftkey' shift lock key (RSHIFT or LSHIFT)
|
||||
# for emulated keyboards that have only one shift key, set both LSHIFT
|
||||
# and RSHIFT to the same row/col and use RSHIFT for VSHIFT and SHIFTL.
|
||||
# '!LCTRL row col' left control keyboard row/column
|
||||
# '!VCTRL ctrlkey' virtual control key (LCTRL)
|
||||
# '!LCBM row col' left CBM keyboard row/column
|
||||
# '!VCBM cbmkey' virtual CBM key (LCBM)
|
||||
# '!UNDEF keysym' remove keysym from table
|
||||
#
|
||||
# Shiftflag can have these values, flags can be ORed to combine them:
|
||||
# 0x0000 0 key is not shifted for this keysym/scancode
|
||||
# 0x0001 1 key is combined with shift for this keysym/scancode
|
||||
# 0x0002 2 key is left shift on emulated machine
|
||||
# 0x0004 4 key is right shift on emulated machine (use only this one
|
||||
# for emulated keyboards that have only one shift key)
|
||||
# 0x0008 8 key can be shifted or not with this keysym/scancode
|
||||
# 0x0010 16 deshift key for this keysym/scancode
|
||||
# 0x0020 32 another definition for this keysym/scancode follows
|
||||
# 0x0040 64 key is shift-lock on emulated machine
|
||||
# 0x0080 128 shift modifier required on host
|
||||
# 0x0100 256 key is used for an alternative keyboard mapping, e.g. C64 mode in x128
|
||||
# 0x0200 512 alt-r (alt-gr) modifier required on host
|
||||
# 0x0400 1024 ctrl modifier required on host
|
||||
# 0x0800 2048 key is combined with cbm for this keysym/scancode
|
||||
# 0x1000 4096 key is combined with ctrl for this keysym/scancode
|
||||
# 0x2000 8192 key is (left) cbm on emulated machine
|
||||
# 0x4000 16384 key is (left) ctrl on emulated machine
|
||||
#
|
||||
# Negative row values:
|
||||
# 'keysym -1 n' joystick keymap A, direction n
|
||||
# 'keysym -2 n' joystick keymap B, direction n
|
||||
# 'keysym -3 0' first RESTORE key
|
||||
# 'keysym -3 1' second RESTORE key
|
||||
# 'keysym -4 0' 40/80 column key (x128)
|
||||
# 'keysym -4 1' CAPS (ASCII/DIN) key (x128)
|
||||
# 'keysym -5 n' joyport keypad, key n (not supported in x128)
|
||||
#
|
||||
# Joystick direction values:
|
||||
# 0 Fire
|
||||
# 1 South/West
|
||||
# 2 South
|
||||
# 3 South/East
|
||||
# 4 West
|
||||
# 5 East
|
||||
# 6 North/West
|
||||
# 7 North
|
||||
# 8 North/East
|
||||
#
|
||||
# Joyport keypad key layout:
|
||||
# --------------------------
|
||||
# | 0 | 1 | 2 | 3 | 4 |
|
||||
# --------------------------
|
||||
# | 5 | 6 | 7 | 8 | 9 |
|
||||
# --------------------------
|
||||
# | 10 | 11 | 12 | 13 | 14 |
|
||||
# --------------------------
|
||||
# | 15 | 16 | 17 | 18 | 19 |
|
||||
# --------------------------
|
||||
#
|
||||
# When a bigger spaced key is used,
|
||||
# it uses the upper left most key value.
|
||||
|
||||
# Symbolic Mapping, US Layout, C64, GTK
|
||||
|
||||
# C64 keyboard matrix:
|
||||
#
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 0|Bit 1|Bit 2|Bit 3|Bit 4|Bit 5|Bit 6|Bit 7|
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 0| DEL |Retrn|C_L/R| F7 | F1 | F3 | F5 |C_U/D|
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 1| 3 # | W | A | 4 $ | Z | S | E | S_L |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 2| 5 % | R | D | 6 & | C | F | T | X |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 3| 7 ' | Y | G | 8 ( | B | H | U | V |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 4| 9 ) | I | J | 0 | M | K | O | N |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 5| + | P | L | - | . > | : [ | @ | , < |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 6|POUND| * | ; ] | HOME| S_R | = | A_UP| / ? |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE| C= | Q | R/S |
|
||||
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
|
||||
# C64 Keyboard layout:
|
||||
#
|
||||
# arrow 1! 2" 3# 4$ 5% 6& 7' 8( 9) 0 + - pound clr del f1/f2
|
||||
# ctrl q w e r t y u i o p @ * ^ restore f3/f4
|
||||
# r/s SL a s d f g h j k l :[ ;] = return f5/f6
|
||||
# CBM LS z x c v b n m ,< .> /? RS u/d l/r f7/f8
|
||||
# space
|
||||
|
||||
!CLEAR
|
||||
!LSHIFT 1 7
|
||||
!RSHIFT 6 4
|
||||
!VSHIFT RSHIFT
|
||||
!SHIFTL LSHIFT
|
||||
!LCBM 7 5
|
||||
!VCBM LCBM
|
||||
!LCTRL 7 2
|
||||
!VCTRL LCTRL
|
||||
|
||||
#####################
|
||||
# |Bit 0| DEL |Retrn|C_L/R| F7 | F1 | F3 | F5 |C_U/D|
|
||||
|
||||
BackSpace 0 0 8
|
||||
Delete 0 0 8
|
||||
Insert 0 0 1
|
||||
Return 0 1 8
|
||||
Right 0 2 8
|
||||
KP_F4 0 2 8
|
||||
Left 0 2 1
|
||||
F7 0 3 8
|
||||
F8 0 3 1
|
||||
F1 0 4 8
|
||||
KP_F1 0 4 8
|
||||
F2 0 4 1
|
||||
KP_F2 0 5 8
|
||||
F3 0 5 8
|
||||
F4 0 5 1
|
||||
F5 0 6 8
|
||||
KP_F3 0 6 8
|
||||
F6 0 6 1
|
||||
Down 0 7 8
|
||||
Up 0 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 1| 3 # | W | A | 4 $ | Z | S | E | S_L |
|
||||
|
||||
numbersign 1 0 1
|
||||
dollar 1 3 1
|
||||
Shift_L 1 7 2
|
||||
# shift lock
|
||||
Caps_Lock 1 7 64
|
||||
|
||||
#####################
|
||||
# |Bit 2| 5 % | R | D | 6 & | C | F | T | X |
|
||||
|
||||
percent 2 0 1
|
||||
ampersand 2 3 1
|
||||
|
||||
#####################
|
||||
# |Bit 3| 7 ' | Y | G | 8 ( | B | H | U | V |
|
||||
|
||||
apostrophe 3 0 1
|
||||
grave 3 0 1
|
||||
parenleft 3 3 1
|
||||
|
||||
#####################
|
||||
# |Bit 4| 9 ) | I | J | 0 | M | K | O | N |
|
||||
|
||||
parenright 4 0 1
|
||||
|
||||
#####################
|
||||
# |Bit 5| + | P | L | - | . > | : [ | @ | , < |
|
||||
|
||||
plus 5 0 16
|
||||
minus 5 3 0
|
||||
period 5 4 0
|
||||
greater 5 4 1
|
||||
colon 5 5 16
|
||||
bracketleft 5 5 1
|
||||
at 5 6 16
|
||||
# underscore -> underscore (@+cbm)
|
||||
underscore 5 6 0x810
|
||||
comma 5 7 0
|
||||
less 5 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 6|POUND| * | ; ] | HOME| S_R | = | A_UP| / ? |
|
||||
|
||||
sterling 6 0 0
|
||||
backslash 6 0 0
|
||||
bar 6 0 8
|
||||
asterisk 6 1 16
|
||||
semicolon 6 2 0
|
||||
bracketright 6 2 1
|
||||
Home 6 3 8
|
||||
Shift_R 6 4 4
|
||||
equal 6 5 0
|
||||
# Page down -> Arrow Up
|
||||
asciicircum 6 6 16
|
||||
Page_Down 6 6 8
|
||||
slash 6 7 0
|
||||
question 6 7 1
|
||||
|
||||
#####################
|
||||
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE| C= | Q | R/S |
|
||||
|
||||
exclam 7 0 1
|
||||
# tilde -> arrow left
|
||||
asciitilde 7 1 16
|
||||
End 7 1 0
|
||||
Control_L 7 2 16392 /* Control_L = CTRL */
|
||||
quotedbl 7 3 1
|
||||
space 7 4 8
|
||||
Tab 7 5 8200 /* Tab = CBM */
|
||||
ISO_Left_Tab 7 5 8200 /* Shift + Tab = CBM */
|
||||
Escape 7 7 8
|
||||
|
||||
#####################
|
||||
# letters and numbers
|
||||
|
||||
0 4 3 0
|
||||
1 7 0 0
|
||||
2 7 3 0
|
||||
3 1 0 0
|
||||
4 1 3 0
|
||||
5 2 0 0
|
||||
6 2 3 0
|
||||
7 3 0 0
|
||||
8 3 3 0
|
||||
9 4 0 0
|
||||
|
||||
A 1 2 8
|
||||
B 3 4 8
|
||||
C 2 4 8
|
||||
D 2 2 8
|
||||
E 1 6 8
|
||||
F 2 5 8
|
||||
G 3 2 8
|
||||
H 3 5 8
|
||||
I 4 1 8
|
||||
J 4 2 8
|
||||
K 4 5 8
|
||||
L 5 2 8
|
||||
M 4 4 8
|
||||
N 4 7 8
|
||||
O 4 6 8
|
||||
P 5 1 8
|
||||
Q 7 6 8
|
||||
R 2 1 8
|
||||
S 1 5 8
|
||||
T 2 6 8
|
||||
U 3 6 8
|
||||
V 3 7 8
|
||||
W 1 1 8
|
||||
X 2 7 8
|
||||
Y 3 1 8
|
||||
Z 1 4 8
|
||||
a 1 2 8
|
||||
b 3 4 8
|
||||
c 2 4 8
|
||||
d 2 2 8
|
||||
e 1 6 8
|
||||
f 2 5 8
|
||||
g 3 2 8
|
||||
h 3 5 8
|
||||
i 4 1 8
|
||||
j 4 2 8
|
||||
k 4 5 8
|
||||
l 5 2 8
|
||||
m 4 4 8
|
||||
n 4 7 8
|
||||
o 4 6 8
|
||||
p 5 1 8
|
||||
q 7 6 8
|
||||
r 2 1 8
|
||||
s 1 5 8
|
||||
t 2 6 8
|
||||
u 3 6 8
|
||||
v 3 7 8
|
||||
w 1 1 8
|
||||
x 2 7 8
|
||||
y 3 1 8
|
||||
z 1 4 8
|
||||
|
||||
# Restore key mappings
|
||||
Page_Up -3 0
|
||||
Prior -3 1
|
||||
|
||||
# Dead keys support for those using US-International keyboard layout.
|
||||
dead_acute 3 0 1 # '
|
||||
dead_grave 3 0 1 # '
|
||||
dead_circumflex 6 6 16 # A_UP
|
||||
dead_tilde 6 6 16 # A_UP
|
||||
dead_perispomeni 7 1 16 # Arrow Left
|
||||
dead_diaeresis 7 3 1 # "
|
||||
|
||||
#
|
||||
# joyport attached keypad
|
||||
#
|
||||
Num_Lock -5 0
|
||||
KP_7 -5 1
|
||||
KP_8 -5 2
|
||||
KP_9 -5 3
|
||||
KP_Divide -5 4
|
||||
Scroll_Lock -5 5
|
||||
KP_4 -5 6
|
||||
KP_5 -5 7
|
||||
KP_6 -5 8
|
||||
KP_Multiply -5 9
|
||||
Sys_Req -5 10
|
||||
KP_1 -5 11
|
||||
KP_2 -5 12
|
||||
KP_3 -5 13
|
||||
KP_Subtract -5 14
|
||||
Print -5 15
|
||||
KP_0 -5 16
|
||||
KP_Delete -5 17
|
||||
KP_Enter -5 18
|
||||
KP_Add -5 19
|
||||
@@ -0,0 +1,56 @@
|
||||
#
|
||||
# VICE Palette file
|
||||
#
|
||||
# Syntax:
|
||||
# Red Green Blue
|
||||
#
|
||||
# TYPE:VICII
|
||||
# NAME:Pepto (PAL)
|
||||
|
||||
# Black
|
||||
00 00 00
|
||||
|
||||
# White
|
||||
FF FF FF
|
||||
|
||||
# Red
|
||||
68 37 2b
|
||||
|
||||
# Cyan
|
||||
70 a4 b2
|
||||
|
||||
# Purple
|
||||
6f 3d 86
|
||||
|
||||
# Green
|
||||
58 8d 43
|
||||
|
||||
# Blue
|
||||
35 28 79
|
||||
|
||||
# Yellow
|
||||
b8 c7 6f
|
||||
|
||||
# Orange
|
||||
6f 4f 25
|
||||
|
||||
# Brown
|
||||
43 39 00
|
||||
|
||||
# Light Red
|
||||
9a 67 59
|
||||
|
||||
# Dark Gray
|
||||
44 44 44
|
||||
|
||||
# Medium Gray
|
||||
6c 6c 6c
|
||||
|
||||
# Light Green
|
||||
9a d2 84
|
||||
|
||||
# Light Blue
|
||||
6c 5e b5
|
||||
|
||||
# Light Gray
|
||||
95 95 95
|
||||
@@ -109,6 +109,7 @@ files:
|
||||
required: false
|
||||
bundled: true
|
||||
source_ref: "src/cdogs/joystick.c:43"
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
|
||||
- name: "font.png"
|
||||
path: "graphics/font.png"
|
||||
|
||||
@@ -56,21 +56,25 @@ files:
|
||||
required: false
|
||||
source_ref: "src/version.h:92, src/d_main.cpp:3794-3796, wadsrc_extra/CMakeLists.txt:1"
|
||||
note: "Per-game filters under static/filter/ (doom.id, strife, hexen, heretic, chex...)."
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
|
||||
- name: "lights.pk3"
|
||||
category: game_data
|
||||
required: false
|
||||
source_ref: "src/d_main.cpp:2053-2058, wadsrc_lights/CMakeLists.txt:1"
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
|
||||
- name: "brightmaps.pk3"
|
||||
category: game_data
|
||||
required: false
|
||||
source_ref: "src/d_main.cpp:2059-2064, wadsrc_bm/CMakeLists.txt:1"
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
|
||||
- name: "game_widescreen_gfx.pk3"
|
||||
category: game_data
|
||||
required: false
|
||||
source_ref: "src/d_main.cpp:2065-2070, wadsrc_widepix/CMakeLists.txt:1"
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
|
||||
- name: "gzdoom.sf2"
|
||||
category: game_data
|
||||
|
||||
@@ -104,3 +104,4 @@ files:
|
||||
required: false
|
||||
bundled: true
|
||||
source_ref: "Hurrican/src/DX8Input.cpp:97-99"
|
||||
unsourceable: "ships inside the engine package; a same-named file of another program must not stand in"
|
||||
@@ -45,6 +45,7 @@ files:
|
||||
required: true
|
||||
source_ref: "code/qcommon/files.c:179 (pak_checksums[0]=1566731103u), 3568 (per-index checksum compare)"
|
||||
note: "Retail Quake III Arena base pak. Engine prints a warning on checksum mismatch, does not refuse the file."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak1.pk3"
|
||||
category: game_data
|
||||
@@ -52,6 +53,7 @@ files:
|
||||
path: "baseq3/pak1.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.c:180 (pak_checksums[1]=298122907u)"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak2.pk3"
|
||||
category: game_data
|
||||
@@ -59,6 +61,7 @@ files:
|
||||
path: "baseq3/pak2.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.c:181 (pak_checksums[2]=412165236u)"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak3.pk3"
|
||||
category: game_data
|
||||
@@ -115,6 +118,7 @@ files:
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.c:192 (missionpak_checksums[0]=2430342401u)"
|
||||
note: "Team Arena base pak. Required only when launching +set fs_game missionpack."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak1.pk3"
|
||||
category: game_data
|
||||
@@ -122,6 +126,7 @@ files:
|
||||
path: "missionpack/pak1.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.c:193 (missionpak_checksums[1]=511014160u)"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak2.pk3"
|
||||
category: game_data
|
||||
@@ -129,6 +134,7 @@ files:
|
||||
path: "missionpack/pak2.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.c:194 (missionpak_checksums[2]=2662638993u)"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak3.pk3"
|
||||
category: game_data
|
||||
|
||||
@@ -63,6 +63,7 @@ files:
|
||||
# ================================================================
|
||||
# main/ - single-player point-release paks
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "sp_pak1.pk3"
|
||||
category: game_data
|
||||
@@ -155,6 +156,7 @@ files:
|
||||
required: false
|
||||
source_ref: "MP/code/qcommon/files.c:209, 1596-1613"
|
||||
note: "VM/binary pak, 1.4/1.41 retail. The client extracts game dlls only from paks whose checksum is listed."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "mp_bin0.pk3"
|
||||
category: game_data
|
||||
|
||||
@@ -60,6 +60,7 @@ files:
|
||||
required: true
|
||||
source_ref: "code/qcommon/files.cpp:326 (fs_originalPaks_main[0]), 4108 (Couldn't load default.cfg)"
|
||||
note: "Carries default.cfg; without it FS_Startup aborts with ERR_FATAL."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "Pak1.pk3"
|
||||
category: game_data
|
||||
@@ -67,6 +68,7 @@ files:
|
||||
path: "main/Pak1.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.cpp:327 (fs_originalPaks_main[1])"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "Pak2.pk3"
|
||||
category: game_data
|
||||
@@ -74,6 +76,7 @@ files:
|
||||
path: "main/Pak2.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.cpp:328 (fs_originalPaks_main[2])"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "Pak3.pk3"
|
||||
category: game_data
|
||||
@@ -116,6 +119,7 @@ files:
|
||||
required: true
|
||||
source_ref: "code/qcommon/files.cpp:337 (fs_originalPaks_mainta[0]), 3200 (fs_basegame=mainta), 4108"
|
||||
note: "Spearhead default.cfg lives here; required when com_target_game=1."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak2.pk3"
|
||||
category: game_data
|
||||
@@ -123,6 +127,7 @@ files:
|
||||
path: "mainta/pak2.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.cpp:338 (fs_originalPaks_mainta[1])"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak3.pk3"
|
||||
category: game_data
|
||||
@@ -158,6 +163,7 @@ files:
|
||||
required: true
|
||||
source_ref: "code/qcommon/files.cpp:346 (fs_originalPaks_maintt[0]), 3227 (fs_basegame=maintt), 4108"
|
||||
note: "Breakthrough default.cfg lives here; required when com_target_game=2."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak2.pk3"
|
||||
category: game_data
|
||||
@@ -165,6 +171,7 @@ files:
|
||||
path: "maintt/pak2.pk3"
|
||||
required: false
|
||||
source_ref: "code/qcommon/files.cpp:347 (fs_originalPaks_maintt[1])"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak3.pk3"
|
||||
category: game_data
|
||||
|
||||
@@ -59,6 +59,7 @@ files:
|
||||
required: true
|
||||
source_ref: "filesystem/pak.c (PAK loader), filesystem/searchpath.c:912 (valve fallback)"
|
||||
note: "Retail Half-Life base pak."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak1.pak"
|
||||
category: game_data
|
||||
@@ -91,6 +92,7 @@ files:
|
||||
# ================================================================
|
||||
# Condition Zero (czero/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -109,6 +111,7 @@ files:
|
||||
# ================================================================
|
||||
# Condition Zero: Deleted Scenes (czeror/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -127,6 +130,7 @@ files:
|
||||
# ================================================================
|
||||
# Deathmatch Classic (dmc/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -145,6 +149,7 @@ files:
|
||||
# ================================================================
|
||||
# Opposing Force (gearbox/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -165,6 +170,7 @@ files:
|
||||
# Blue Shift (bshift/)
|
||||
# Half-Life source dir still called "bshift" in Steam depot.
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -183,6 +189,7 @@ files:
|
||||
# ================================================================
|
||||
# Ricochet (ricochet/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -201,6 +208,7 @@ files:
|
||||
# ================================================================
|
||||
# Team Fortress Classic (tfc/)
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "liblist.gam"
|
||||
category: game_data
|
||||
@@ -215,3 +223,4 @@ files:
|
||||
path: "tfc/pak0.pak"
|
||||
required: false
|
||||
source_ref: "filesystem/pak.c"
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
@@ -81,6 +81,7 @@ files:
|
||||
# Ground Zero (rogue/), official Mission Pack 2
|
||||
# Separate yquake2 game library repo: yquake2/rogue.
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak0.pak"
|
||||
category: game_data
|
||||
@@ -94,6 +95,7 @@ files:
|
||||
# Three Wave Capture The Flag (ctf/), official free addon
|
||||
# Separate yquake2 game library repo: yquake2/ctf.
|
||||
# ================================================================
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
|
||||
- name: "pak0.pak"
|
||||
category: game_data
|
||||
@@ -102,3 +104,4 @@ files:
|
||||
required: false
|
||||
source_ref: "src/common/filesystem.c:1331 (first_mods[3]=ctf), 1688"
|
||||
note: "Three Wave CTF data. Loaded when `+set game ctf` is passed."
|
||||
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
|
||||
@@ -39,6 +39,10 @@ NODEDUP_DIRS = {
|
||||
# A zoneinfo tree is addressed by zone name and its aliases are equal
|
||||
# files by design: US/Samoa is Pacific/Midway.
|
||||
"tzdata",
|
||||
# VICE data is addressed by machine directory: C64, C64DTV and SCPU64
|
||||
# share one keymap, C64 and CBM-II one palette. With the copies removed
|
||||
# the name step served the C128 keymap to all of them.
|
||||
"c64-emu",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
"""Game data laid out in a directory is not served by another game's file.
|
||||
|
||||
Engines read generic names from their own tree: `pak0.pak` is Quake II's
|
||||
under `baseq2/` and Half-Life's under `valve/`. The name step of the resolver
|
||||
ignores directories, so once one of them is collected every other entry of
|
||||
that name resolves to it and a pack ships the wrong game's bytes under the
|
||||
right path. The collection stores such a file under the tail the engine
|
||||
reads (`.../baseq2/pak0.pak`), which lets its own entry resolve by path; an
|
||||
entry that only reaches the same file by its bare name is a homonym, and
|
||||
carries `unsourceable:` until its own bytes are held.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(REPO_ROOT / "scripts"))
|
||||
|
||||
from common import ( # noqa: E402
|
||||
build_zip_contents_index,
|
||||
load_data_dir_registry,
|
||||
load_database,
|
||||
load_emulator_profiles,
|
||||
resolve_local_file,
|
||||
)
|
||||
|
||||
|
||||
def homonyms(claims: list[tuple[str, str, str, str]]) -> list[tuple[str, str, str]]:
|
||||
"""(profile, destination, file) for name-only claims on a file that
|
||||
another entry reaches by its path.
|
||||
|
||||
claims: (profile, destination, status, local file).
|
||||
"""
|
||||
by_path = {local for _, _, status, local in claims if status == "path_exact"}
|
||||
found = []
|
||||
for profile, dest, status, local in claims:
|
||||
if status != "name_exact" or local not in by_path:
|
||||
continue
|
||||
if local.casefold().endswith("/" + dest.casefold()):
|
||||
continue
|
||||
if local.rsplit("/", 1)[-1].casefold() != dest.rsplit("/", 1)[-1].casefold():
|
||||
# Reached through an alias: the profile says the two are one file.
|
||||
continue
|
||||
found.append((profile, dest, local))
|
||||
return sorted(found)
|
||||
|
||||
|
||||
class HomonymRule(unittest.TestCase):
|
||||
def test_a_name_claim_on_a_file_another_entry_reaches_by_path_is_named(self):
|
||||
claims = [
|
||||
("quake2", "baseq2/pak0.pak", "path_exact", "bios/Q2/baseq2/pak0.pak"),
|
||||
("halflife", "valve/pak0.pak", "name_exact", "bios/Q2/baseq2/pak0.pak"),
|
||||
]
|
||||
self.assertEqual(
|
||||
homonyms(claims), [("halflife", "valve/pak0.pak", "bios/Q2/baseq2/pak0.pak")]
|
||||
)
|
||||
|
||||
def test_a_file_only_ever_found_by_name_is_not_judged(self):
|
||||
claims = [
|
||||
("mame2003", "mame2003/cheat.dat", "name_exact", "bios/Arcade/cheat.dat"),
|
||||
("mame2010", "mame2010/cheat.dat", "name_exact", "bios/Arcade/cheat.dat"),
|
||||
]
|
||||
self.assertEqual(homonyms(claims), [])
|
||||
|
||||
def test_a_declared_alias_is_the_profile_speaking(self):
|
||||
claims = [
|
||||
("m", "crosshair/cross7.png", "path_exact", "bios/m/crosshair/cross7.png"),
|
||||
("m", "crosshair/cross8.png", "name_exact", "bios/m/crosshair/cross7.png"),
|
||||
]
|
||||
self.assertEqual(homonyms(claims), [])
|
||||
|
||||
def test_two_entries_sharing_a_path_agree(self):
|
||||
claims = [
|
||||
("a", "etmain/pak1.pk3", "path_exact", "bios/ET/etmain/pak1.pk3"),
|
||||
("b", "etmain/pak1.pk3", "path_exact", "bios/ET/etmain/pak1.pk3"),
|
||||
]
|
||||
self.assertEqual(homonyms(claims), [])
|
||||
|
||||
|
||||
class CollectionCarriesNoGameDataHomonym(unittest.TestCase):
|
||||
def test_the_profiles_resolve_no_game_data_to_another_game(self):
|
||||
database = REPO_ROOT / "database.json"
|
||||
if not database.is_file():
|
||||
self.skipTest("no database.json")
|
||||
previous = os.getcwd()
|
||||
os.chdir(REPO_ROOT)
|
||||
try:
|
||||
db = load_database(str(database))
|
||||
profiles = load_emulator_profiles("emulators", skip_aliases=False)
|
||||
zip_index = build_zip_contents_index(db)
|
||||
registry = load_data_dir_registry("platforms")
|
||||
claims = []
|
||||
for name, profile in sorted(profiles.items()):
|
||||
for entry in profile.get("files") or []:
|
||||
if entry.get("category") != "game_data" or entry.get("unsourceable"):
|
||||
continue
|
||||
dest = str(entry.get("path") or entry.get("name") or "")
|
||||
if "/" not in dest.strip("/"):
|
||||
continue
|
||||
local, status = resolve_local_file(
|
||||
entry, db, zip_index, dest_hint=dest, data_dir_registry=registry
|
||||
)
|
||||
if local:
|
||||
claims.append((name, dest, status, local))
|
||||
finally:
|
||||
os.chdir(previous)
|
||||
self.assertEqual(homonyms(claims), [])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user