Skip to content

Instantly share code, notes, and snippets.

@RoadrunnerWMC
Created August 15, 2021 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RoadrunnerWMC/e6c9c8791b99664906be894cbba5cf9c to your computer and use it in GitHub Desktop.
Save RoadrunnerWMC/e6c9c8791b99664906be894cbba5cf9c to your computer and use it in GitHub Desktop.
Jinja2 template that generates accurate NSMBW staff credits for all regions
:<bold>PRODUCERS</bold>
:Takashi Tezuka
:Hiroyuki Kimura
:<bold>DIRECTOR</bold>
:Shigeyuki Asuke
:<bold>PLANNING</bold>
:Yusuke Amano
:Masanao Arimoto
:Shigefumi Hino
:<bold>MAP&LEVEL DESIGN DIRECTOR</bold>
:Toshihiko Nakago
:<bold>MAP&LEVEL DESIGN</bold>
:Yasuhisa Yamamura
:Masataka Takemoto
:Kenta Usui
:Ryutaro Kanno
:Takayuki Ikkaku
:<bold>LEAD DESIGN</bold>
:Michiho Hayashi
:<bold>PLAYER DESIGN</bold>
:Keisuke Nishimori
:Tomomi Marunami
:<bold>CHARACTER DESIGN</bold>
:Masaaki Ishikawa
:Masanobu Sato
:Ryota Akutsu
:Manabu Hiraoka
:Kazunori Fujii
:<bold>FIELD DESIGN</bold>
:Eiji Mukao
:Kosono Okina
:Mari Shibata
:<bold>WORLD MAP DESIGN</bold>
:Jun Takamura
:Takeshi Koike
:<bold>UI DESIGN</bold>
:Mei Ide
:Yoshifumi Masaki
:Satoko Okada
:<bold>EFFECTS DESIGN</bold>
:Sayaka Nishimura
:<bold>DESIGN ADVISER</bold>
:Atsushi Miyagi
:<bold>DESIGN SUPPORT</bold>
:Daisuke Ito
:Tomomi Imazu
:Kaori Kinoshita
:Kunihito Ihara
:<bold>PROGRAMMING DIRECTOR</bold>
:Makoto Sasaki
:<bold>PLAYER PROGRAMMING</bold>
:Keigo Nakanishi
:<bold>FIELD PROGRAMMING</bold>
:Kouji Sakai
:<bold>ENEMY PROGRAMMING</bold>
:Tatsuo Nishiyama
:Kenichi Nishiyama
:Keiji Takahashi
:Keiichiro Kato
:Ken Watanabe
:Yosuke Oshino
:<bold>SYSTEM PROGRAMMING</bold>
:Hisashi Okada
:Kenzo Hayakawa
:<bold>UI PROGRAMMING</bold>
:Kiyoshi Koda
:<bold>WORLD MAP PROGRAMMING</bold>
:Shoichi Obayashi
:<bold>PROGRAMMING</bold>
:Yuji Sawatani
:Masaro Sakakibara
:Misato Sodeyama
:Shinji Hatada
:Hiromichi Miyake
:Masashi Masuoka
:<bold>PROGRAMMING ADVISER</bold>
:Yuhiki Otsuki
:<bold>SOUND DIRECTOR</bold>
:Kenta Nagata
:<bold>SOUND PROGRAMMING</bold>
:Sanae Uchida
:<bold>SOUND EFFECT{% if region != "CN" %}S{% endif %}</bold>
:Mitsuhiro Kida
:Taiju Suzuki
:<bold>MUSIC</bold>
:Shiho Fujii
:Ryo Nagamatsu
:<bold>VOICE</bold>
:Dan Falcone
:Kenny James
:Sam Kelly
:Charles Martinet
:Lani Minella
:{% if region in ['JP', 'US', 'EU', 'CN'] %}Catey{% else %}Caety{% endif %} Sagoian{# The correct name is "Caety" #}
:Mike Vaughn
:<bold>SOUND ADVISER</bold>
:Koji Kondo
:<bold>COORDINATORS</bold>
:Tsutomu Kaneshige
:Tomoaki Yoshinobu
:Hideki Fujii
:<no_coin>Rina Yamauchi</no_coin>
:<bold>DEMO SCENE DIRECTOR</bold>
:Takumi Kawagoe
:<bold>DEMO SCENE MOTION DESIGN</bold>
:Yoshikazu Sumioka
:Eisuke Sagawa
:Tatsuya Sakai
:Youko Miyaguchi
:<bold>GRAPHIC SUPERVISORS</bold>
:Aya Oyama
:Akiko Kato
:Kanae Dohta
:Tsuyoshi Watanabe
:<bold>PROGRESS MANAGEMENT</bold>
:Keizo Kato
:<bold>TECHNICAL SUPPORT</bold>
:Hironobu Kakui
:Yoshito Yasuda
:Shintaro Jikumaru
{% if region == 'US' %}
:<bold>LOCALIZATION MANAGEMENT</bold>
:Nate Bihldorff
:Reiko Ninomiya
:Tim O'Leary
:Leslie Swan
:<bold>NOA LOCALIZATION</bold>
:Camilo Alba Navarro
:Joanie Grenader
:Lars Knudson
:Erik Peterson
{% elif region == 'EU' %}
:<bold>LOCALISATION MANAGEMENT</bold>
:Erkan Kasap
:Paul Logue
:Matthew Mawer
:Micky Auer
:<bold>LOCALISATION PRODUCER</bold>
:Takashi Katagiri
:<bold>TRANSLATION</bold>
:Andrew Steele
:Carine Mathey
:Massimo Cotticelli
:Rafael Jagielski
:Miguel Rodríguez Ramos
:<bold>QUALITY ASSURANCE</bold>
:Amaury Bagnariol
:NOE Quality Assurance
{% elif region == 'KR' %}
:<bold>LOCALIZATION MANAGEMENT</bold>
:Daisuke Sakaguchi
:Hyokjin Jung
:<bold>TRANSLATION</bold>
:Yunhye Lee
:Dongyeon Kim
:<bold>PRODUCT SUPPORT</bold>
:Kimiko Nakamichi
:Ilho Kim
:Jonghoon Park
:<bold>PRODUCT TESTING</bold>
:Manabu Matumoto
:Masaki Wada
:Junbong Lee
:Sungmin Park
:Juyoung Choi
:Kyoungim Na
:Mario Club Co., Ltd.
:NOK Debug Team
{% elif region == 'TW' %}
:<bold>LOCALIZATION MANAGEMENT</bold>
:Motoyasu Tojima
:<bold>iQue LOCALIZATION MANAGEMENT</bold>
:Shin'ichi Sasamoto
:<bold>iQue LOCALIZATION</bold>
:Qiu Xiaochun
:Wu Mengzhi
:<bold>PRODUCT TESTING</bold>
:Manabu Matumoto
:Masaki Wada
:Mario Club Co., Ltd.
:<bold>NPC PRODUCT TESTING</bold>
:Chang Yuan Gang
:Tsai Yi-Chen
:<bold>NHL PRODUCT TESTING</bold>
:Kirsty Wong
{% endif %}
{% if region in ['JP', 'US', 'EU', 'CN'] %}:<bold>DEBUG</bold>
:Naoki Takami
:Ryuhei Matsuura
:Mario Club Co., Ltd.
:NOA Product Testing
{% endif %}:<bold>SPECIAL THANKS</bold>
:SRD
:DIGITALSCAPE Co., Ltd.
:Mox Inc.
:Hirotake Otsubo
:Yoshiyuki Oyama
:Akito Osanai
:Tsubasa Sakaguchi
:Yoshiki Haruhana
:Takahiro Hamaguchi
:Keijiro Inoue
:Takuhiro Dohta{% if region == 'TW' %}
:Megumi Shichida{% endif %}
:<bold>GENERAL PRODUCER</bold>
:Shigeru Miyamoto
:<bold>EXECUTIVE PRODUCER</bold>
:<coin>Satoru Iwata</coin>
:<Copyrights>
# 2021-08-15, RRWMC
# Usage: put all staffroll text files (converted with Staffroll Tool:
# https://github.com/RoadrunnerWMC/nsmbw-staffroll-tool) in this folder,
# named "staffroll_{language}.txt", as well as staffroll_master.jinja2.
# Then, run this with Python 3.6+
from pathlib import Path
import jinja2 # pip install Jinja2
LANGUAGES_PER_REGION = {
'JP': ['JP'],
'US': ['EngUS', 'FraUS', 'SpaUS'],
'EU': ['EngEU', 'FraEU', 'GerEU', 'ItaEU', 'SpaEU'],
'KR': ['KR'],
'TW': ['TW'],
'CN': ['CN'],
}
def main():
# Jinja eats exactly one trailing newline for some reason, so,
# compensating for that with "+ '\n'"
template = jinja2.Template(
Path('staffroll_master.jinja2').read_text(encoding='utf-8') + '\n')
for region, languages in LANGUAGES_PER_REGION.items():
for language in languages:
# Note: despite the game having one staffroll.bin per
# language, they're always all identical in each region. So
# "language" below isn't actually used by the template
predicted = template.render(region=region, language=language)
actual = Path(f'staffroll_{language}.txt').read_text(encoding='utf-8')
if actual != predicted:
raise ValueError(f'Template fails for {region}/{language}')
print('Template is accurate')
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment