mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
add sa1 progress to repo (#266)
This commit is contained in:
1 parent
b497d5646d
commit
cf89b48f5e
8 files changed
+62
-58
No files matched your search
+29
-24
@@ -28,10 +28,10 @@ jobs:
|
||||
run: |
|
||||
make check_format
|
||||
|
||||
build-gba:
|
||||
build-sa2-gba:
|
||||
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork || github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork}}
|
||||
runs-on: ubuntu-24.04
|
||||
name: Build GBA (USA)
|
||||
name: Build SA2 GBA (USA)
|
||||
steps:
|
||||
- name: Checkout PR
|
||||
if: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target'}}
|
||||
@@ -78,13 +78,13 @@ jobs:
|
||||
- name: Generate reports
|
||||
run: |
|
||||
mkdir -p gh-pages/reports
|
||||
mkdir -p gh-pages/maps
|
||||
mkdir -p gh-pages/maps/sa2
|
||||
python3 scripts/progress.py csv > gh-pages/reports/progress-sa2-nonmatching-latest.csv
|
||||
python3 scripts/progress.py csv -m > gh-pages/reports/progress-sa2-matching-latest.csv
|
||||
python3 scripts/progress.py shield-json > gh-pages/reports/progress-sa2-shield.json
|
||||
python3 scripts/progress.py shield-json -m > gh-pages/reports/progress-sa2-shield-matching.json
|
||||
echo "REPORTS_COMMIT_MSG=$( git log --format=%s ${GITHUB_SHA} )" >> $GITHUB_ENV
|
||||
cp sa2.map gh-pages/maps/${GITHUB_SHA}.map
|
||||
cp sa2.map gh-pages/maps/sa2/${GITHUB_SHA}.map
|
||||
|
||||
- name: Generate reports (Collect Rings)
|
||||
run: |
|
||||
@@ -108,6 +108,7 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
gh-pages
|
||||
name: sa2
|
||||
|
||||
build-sa1-gba:
|
||||
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork || github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork}}
|
||||
@@ -150,32 +151,33 @@ jobs:
|
||||
- name: Compare
|
||||
run: make sa1 -j${nproc}
|
||||
|
||||
# - name: Progress
|
||||
# run: |
|
||||
# python3 scripts/progress.py text
|
||||
- name: Progress
|
||||
run: |
|
||||
python3 scripts/progress.py -f sa1.map text
|
||||
|
||||
# - name: Generate reports
|
||||
# run: |
|
||||
# mkdir -p gh-pages/reports
|
||||
# mkdir -p gh-pages/maps
|
||||
# python3 sa1/scripts/progress.py csv >> gh-pages/reports/progress-sa1-nonmatching.csv
|
||||
# python3 sa1/scripts/progress.py csv -m >> gh-pages/reports/progress-sa1-matching.csv
|
||||
# python3 sa1/scripts/progress.py shield-json > gh-pages/reports/progress-sa1-shield.json
|
||||
# python3 sa1/scripts/progress.py shield-json -m > gh-pages/reports/progress-sa1-shield-matching.json
|
||||
# echo "REPORTS_COMMIT_MSG=$( git log --format=%s ${GITHUB_SHA} )" >> $GITHUB_ENV
|
||||
# cp sa1.map gh-pages/maps/${GITHUB_SHA}.map
|
||||
- name: Generate reports
|
||||
run: |
|
||||
mkdir -p gh-pages/reports
|
||||
mkdir -p gh-pages/maps/sa1
|
||||
python3 scripts/progress.py -f sa1.map csv >> gh-pages/reports/progress-sa1-nonmatching-latest.csv
|
||||
python3 scripts/progress.py -f sa1.map csv -m >> gh-pages/reports/progress-sa1-matching-latest.csv
|
||||
python3 scripts/progress.py -f sa1.map shield-json > gh-pages/reports/progress-sa1-shield.json
|
||||
python3 scripts/progress.py -f sa1.map shield-json -m > gh-pages/reports/progress-sa1-shield-matching.json
|
||||
echo "REPORTS_COMMIT_MSG=$( git log --format=%s ${GITHUB_SHA} )" >> $GITHUB_ENV
|
||||
cp sa1.map gh-pages/maps/sa1/${GITHUB_SHA}.map
|
||||
|
||||
# - name: Upload progress
|
||||
# if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
|
||||
# uses: actions/upload-artifact@v7
|
||||
# with:
|
||||
# path: |
|
||||
# gh-pages
|
||||
- name: Upload progress
|
||||
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
path: |
|
||||
gh-pages
|
||||
name: sa1
|
||||
|
||||
publish-progress:
|
||||
name: Publish progress
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [build-gba]
|
||||
needs: [build-sa2-gba, build-sa1-gba]
|
||||
# Only able to run from repo pull requests (by maintainers, or on the main branch via push)
|
||||
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
|
||||
permissions:
|
||||
@@ -191,7 +193,10 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
gh-pages
|
||||
merge-multiple: true
|
||||
- run: |
|
||||
cat gh-pages/reports/progress-sa1-nonmatching-latest.csv >> gh-pages/reports/progress-sa1-nonmatching.csv
|
||||
cat gh-pages/reports/progress-sa1-matching-latest.csv >> gh-pages/reports/progress-sa1-matching.csv
|
||||
cat gh-pages/reports/progress-sa2-nonmatching-latest.csv >> gh-pages/reports/progress-sa2-nonmatching.csv
|
||||
cat gh-pages/reports/progress-sa2-matching-latest.csv >> gh-pages/reports/progress-sa2-matching.csv
|
||||
cat gh-pages/reports/progress-collect_rings-nonmatching-latest.csv >> gh-pages/reports/progress-collect_rings-nonmatching.csv
|
||||
|
||||
@@ -2,13 +2,17 @@
|
||||
<p align="center">
|
||||
<img height="240" src=".github/media/titlescreen.png" alt="Sonic Advance 2 title screen">
|
||||
</p>
|
||||
<p align="center">
|
||||
<div align="center">
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| SA1 |   |
|
||||
| SA2 |   |
|
||||
|
||||
<a href="https://github.com/SAT-R/sa2/actions/workflows/build.yml"><img src="https://github.com/SAT-R/sa2/actions/workflows/build.yml/badge.svg" alt="CI status"></a>
|
||||
<a href="https://github.com/SAT-R/sa2"><img src="https://img.shields.io/endpoint?url=https://sat-r.github.io/sa2/reports/progress-sa2-shield.json" alt="Decompilation Progress"></a>
|
||||
<a href="https://github.com/SAT-R/sa2"><img src="https://img.shields.io/endpoint?url=https://sat-r.github.io/sa2/reports/progress-sa2-shield-matching.json" alt="Decompilation Matching Progress"></a>
|
||||
<a href="https://github.com/SAT-R/sa2/graphs/contributors"><img src="https://img.shields.io/github/contributors/SAT-R/sa2" alt="Contributors"></a>
|
||||
<a href="https://discord.gg/vZTvVH3gA9"><img src="https://img.shields.io/discord/1052347299457671200" alt="Discord"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
> :warning: **This project is not completed and still under active development**
|
||||
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
Vendored
+22
-27
@@ -6,42 +6,45 @@ import git
|
||||
import os
|
||||
import re
|
||||
|
||||
def collect_non_matching_funcs():
|
||||
def read_non_matching_funcs(filepath, game):
|
||||
result = []
|
||||
for root, dirs, files in os.walk('src'):
|
||||
if "/sa1/" in root:
|
||||
continue
|
||||
for file in files:
|
||||
if file.endswith('.c'):
|
||||
with open(os.path.join(root, file), 'r') as f:
|
||||
with open(filepath, 'r') as f:
|
||||
data = f.read()
|
||||
lines = data.split("\n")
|
||||
for i in range(len(lines)):
|
||||
line = lines[i]
|
||||
if "sa1" in line:
|
||||
continue
|
||||
if "NONMATCH" in line:
|
||||
if game == "sa1" and "sa2." in line:
|
||||
continue
|
||||
|
||||
if game == "sa2" and "sa1." in line:
|
||||
continue
|
||||
|
||||
# if "unused_" in line.lower():
|
||||
# continue
|
||||
matcher = r'(NONMATCH|ASM_FUNC)\(".*",\W*\w*\W*(\w*).*\)'
|
||||
matcher = r'(NONMATCH|ASM_FUNC)\(".*?",\s*\w+\s+(?:SA2_LABEL\()?(\w+).*\)'
|
||||
match = re.findall(matcher, line)
|
||||
if match:
|
||||
result.append(match[0])
|
||||
result.append(match[0][1])
|
||||
else:
|
||||
if i < len(lines) - 1:
|
||||
line = lines[i + 1]
|
||||
match = re.findall(r'\W*\w*\W*(\w*).*\)', line)
|
||||
if match:
|
||||
result.append(('NONMATCH', match[0]))
|
||||
result.append(match[0])
|
||||
if result:
|
||||
print(filepath, result)
|
||||
return result
|
||||
|
||||
|
||||
def parse_map(non_matching_funcs, map_file):
|
||||
def parse_map(matching, map_file):
|
||||
src = 0
|
||||
asm = 0
|
||||
src_data = 0
|
||||
data = 0
|
||||
game = map_file.replace(".map", "")
|
||||
non_matching = 0
|
||||
non_matching_funcs = []
|
||||
|
||||
with open(map_file, 'r') as map:
|
||||
# Skip to the linker script section
|
||||
@@ -61,6 +64,11 @@ def parse_map(non_matching_funcs, map_file):
|
||||
section = arr[0]
|
||||
size = int(arr[2], 16)
|
||||
filepath = arr[3]
|
||||
if (filepath.startswith('src')):
|
||||
if matching:
|
||||
c_path = filepath.replace(".o", ".c")
|
||||
if os.path.exists(c_path):
|
||||
non_matching_funcs += read_non_matching_funcs(c_path, game)
|
||||
if filepath.startswith('build'):
|
||||
# build/*/(asm|data|sound|src|...)/*/
|
||||
# ^ ^ ^
|
||||
@@ -123,20 +131,7 @@ def main():
|
||||
parser.add_argument("-f", "--file", dest='map_file', default="sa2.map")
|
||||
args = parser.parse_args()
|
||||
|
||||
matching = args.matching
|
||||
|
||||
non_matching_funcs = []
|
||||
funcs = collect_non_matching_funcs()
|
||||
if matching:
|
||||
# Remove all non matching funcs from count
|
||||
non_matching_funcs = [x[1] for x in funcs]
|
||||
else:
|
||||
# Only remove ASM_FUNC functions from count
|
||||
for func in funcs:
|
||||
if func[0] == 'ASM_FUNC':
|
||||
non_matching_funcs.append(func[1])
|
||||
|
||||
(src, asm, src_data, data) = parse_map(non_matching_funcs, args.map_file)
|
||||
(src, asm, src_data, data) = parse_map(args.matching, args.map_file)
|
||||
|
||||
total = src + asm
|
||||
data_total = src_data + data
|
||||
|
||||
@@ -142,7 +142,7 @@ u32 Coll_Player_Spring_Sideways(Sprite *s, CamCoord worldX, CamCoord worldY, Pla
|
||||
}
|
||||
|
||||
// (99.92%) https://decomp.me/scratch/GFpFd
|
||||
NONMATCH("asm/non_matching/game/shared/stage/collision__Coll_Player_Itembox.inc",
|
||||
NONMATCH("asm/non_matching/game/shared/stage/collision__Coll_Player_Itembox_sa1.inc",
|
||||
u32 Coll_Player_Itembox(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p))
|
||||
{
|
||||
s8 rectDataPlayerA[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), (p->spriteOffsetX + 5), (p->spriteOffsetY - 1) };
|
||||
@@ -861,7 +861,7 @@ EHit sub_800C0E0(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p)
|
||||
}
|
||||
|
||||
// (97.67%) https://decomp.me/scratch/e4jLp
|
||||
NONMATCH("asm/non_matching/game/shared/stage/collision__sub_800C1E8.inc",
|
||||
NONMATCH("asm/non_matching/game/shared/stage/collision__sub_800C1E8_sa1.inc",
|
||||
u32 sub_800C1E8(Sprite *inSprite, Rect8 rectB, s16 sx, s16 sy, Player *p))
|
||||
{
|
||||
#ifndef NON_MATCHING
|
||||
|
||||
@@ -249,7 +249,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i)
|
||||
#ifndef COLLECT_RINGS_ROM
|
||||
#if (GAME == GAME_SA1)
|
||||
// (96.15%) https://decomp.me/scratch/LMpNt
|
||||
NONMATCH("asm/non_matching/game/shared/stage/evt_mgr__ReceiveRoomEvent_ReachedStageGoal.inc",
|
||||
NONMATCH("asm/non_matching/game/shared/stage/evt_mgr__ReceiveRoomEvent_ReachedStageGoal_sa1.inc",
|
||||
void ReceiveRoomEvent_ReachedStageGoal(union MultiSioData *recv, u8 i))
|
||||
#else
|
||||
void ReceiveRoomEvent_ReachedStageGoal(union MultiSioData *recv, u8 i)
|
||||
|
||||
Reference in new issue
Block a user