From f706ff75fc3873623d91e71dde572d264051c469 Mon Sep 17 00:00:00 2001 From: Voyager Date: Mon, 17 Aug 2026 21:43:58 -0400 Subject: [PATCH] feat: add credits artwork and net attribution --- tests/title_credits_validation.gd | 29 +++++++++++++++---- ui/icons/main_menu/credits.png | Bin 0 -> 3139 bytes ui/icons/main_menu/credits.png.import | 40 ++++++++++++++++++++++++++ ui/title_credits_page.tscn | 13 +++++++++ ui/title_screen.tscn | 6 ++-- 5 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 ui/icons/main_menu/credits.png create mode 100644 ui/icons/main_menu/credits.png.import diff --git a/tests/title_credits_validation.gd b/tests/title_credits_validation.gd index d1e4c8c..abee11e 100644 --- a/tests/title_credits_validation.gd +++ b/tests/title_credits_validation.gd @@ -34,6 +34,10 @@ func _run() -> void: await process_frame _expect(credits_button != null, "title menu exposes a credits button") + _expect( + credits_button.icon != null and credits_button.text.is_empty(), + "credits bubble uses its authored icon", + ) _expect(credits_page != null, "title screen contains the credits page") _expect(not credits_page.visible, "credits page starts closed") _expect( @@ -145,15 +149,19 @@ func _run() -> void: var chillnfill_credit := credits_page.get_node( "Paper/Margin/Layout/Columns/CreativeCredits/ChillnfillCredit" ) as Label + var adamantris_name := credits_page.get_node( + "Paper/Margin/Layout/Columns/CreativeCredits/AdamantrisName" + ) as Label + var adamantris_credit := credits_page.get_node( + "Paper/Margin/Layout/Columns/CreativeCredits/AdamantrisCredit" + ) as Label var tekgator_name := credits_page.get_node( "Paper/Margin/Layout/Columns/CreativeCredits/TekgatorName" ) as Label var tekgator_credit := credits_page.get_node( "Paper/Margin/Layout/Columns/CreativeCredits/TekgatorCredit" ) as Label - var creative_credits := credits_page.get_node( - "Paper/Margin/Layout/Columns/CreativeCredits" - ) as VBoxContainer + var credits_paper := credits_page.get_node("Paper") as PanelContainer var audio_credits := credits_page.get_node( "Paper/Margin/Layout/Columns/AdditionalCredits/AudioCredits" ) as Label @@ -170,6 +178,15 @@ func _run() -> void: "trees and bridges" in chillnfill_credit.text.to_lower(), "in-game credits describe the supplied model families", ) + _expect( + adamantris_name.text == "adamantris", + "in-game credits name adamantris", + ) + _expect( + "hand-net model" in adamantris_credit.text.to_lower() + and "texture artwork" in adamantris_credit.text.to_lower(), + "in-game credits describe adamantris's hand-net contribution", + ) _expect( tekgator_name.text == "Tekgator", "in-game credits name Tekgator", @@ -187,10 +204,10 @@ func _run() -> void: "in-game credits name kim's animalese voice contribution", ) _expect( - Rect2(Vector2.ZERO, creative_credits.size).encloses( - Rect2(tekgator_credit.position, tekgator_credit.size) + credits_paper.get_global_rect().encloses( + tekgator_credit.get_global_rect() ), - "Tekgator's credit stays inside the authored credits column", + "contributor credits stay inside the authored credits panel", ) title_screen.queue_free() diff --git a/ui/icons/main_menu/credits.png b/ui/icons/main_menu/credits.png new file mode 100644 index 0000000000000000000000000000000000000000..9578e07f782841ac188885837dbff1677eb3ce39 GIT binary patch literal 3139 zcmaJ?3pkW%8-53Ka6U)K%#hQ}n8rAyX^SjnoR39Kn?o}hr~) zYwZSSOXR|d!ZEk@$ZI$e{B7MF0f^QGAoeH#AK_8#1OO2<0ABe3z&Hzl3O}db^*b2I zW_vL?j*fr?*EoPdVE~c{1w`N=jf_AXUfWS>04+QRzz3zivJOD$f5Rtof!N;|KAeF+ zFI2z{jbI~d6a^VpX3+xF-#mC$Ao7(b0t!UGtr6ZxAGQ(z5fc{&4;#3};i=d)6d4UN zR?9%RCFAhO52#S#C{9@3l5hmF#2P)Yb}e#Z1PBC-mLXPa zozN}PJ#j5zT4C!X;f)ZgAm;>wWtI>LZ9p(d9Qr5fK?w{2`lJ9oxJFdqh}>?xfjALq z1+s+>g-^oL(vtrt`!LwwdV!mhJ0NN+=%8v#7bWMTzWCLv$qb}VOnw&saMzEDp{5o~ z#k>$r<{Ko8T@=;O`u+W_w|8Eaf6p2^NdEJq>VaX?*1E2Q1ru&NQRF)U}gnnej zpKaa!_IZNw!j+GGysps-#lbYOBz)|;{9}Qe!`I5iUN2mfu)AN1UDe=88Xd{1tQOc$ zy}IH3$8(;$IuK>%G!Xk1>VLT2um`xBI;Ij!)A@CJ7Kbh;fB|V2Gb^Vj_fjBPHFiJ-9y`krZ z@ec;)e0@}n8Xwj(qGTc&*#sQ^OCdnPP=mOb<(Q5x6G1(a7Q1x9nUZ$(l$W+;Fusmu>{g*sQXO z@CKuS+rIvBn_Lu{u@2vp>;WpbT^jR{sdLr8%yNy)FEBHapL`Lu&74$H?Bf(FLrpy7 zn`Ad)bwVU@JC#U2E;WzpF)a!WOrCh86u3E5ZTH0H*YA}S%1@A$Yh=4f**YCbHJ(w* z)^!!04yAs7`EA=kzMbD|a`XpoRkFrO`6*u$@BPg^`&#ofU!-EPu?q@*79U$v5;86+ zHOs$zczs_Z`k>pSTyW!XSKjz=70NbEv9N{Os2*d#?=}1E&q>yvPr(g^SB!qNonC8a z8p@+KLsvJosBa;AB<*0zJH=TS{AGCb=#AwV z>b6t;6)oETdR~3%mrj=XuMhlf`(Borq{r_9t%o8K#d^)OQ11;shAtXBu2zpJMQNt4 zZ|%$x@UPX^x{q}@S#DB@q%nTpcy{vSzqC|x=k~LIo=J#QZ9QF@()fOUiuzOTtZe+! z?@!8i`@k;;&=J^p3HJI5*bM(LHk<&RMmIC0nHw6d_n?_DXmo~=5t&9~&}hXX#g_jd zgz)xqIS0NG%sh}>$cCeQ}NhTJG)mu*cI=Ziy6ECd-z`&!tM(G)vpvQ*xCuP~tbE9Xn3)nLS}GyA>as zI9M9?pKK*QxCEhi&I52m!{8=EE11sKTO|h(=T!_Q%Y- za-vHA;m=;>Z% zD(}hZ%OpugsaTd&4NB_hw+bS}Z)cjuU}Db&-#F!6D24|uoQ_T_5U%PW?L$3p+H^fr zZ02EakV;$sq354c%bX?>x;>ZDo?blV&MSH#y;x&oR&{pMNya6EoTl(u=7>q_gqFmd zu35*;WPLFw#{loRYO&!H_J6Xn99%ln#)x9}4wrSxO0T3AMr-X{ZT0Kj=8DkW+FOGH zAHOr#-I{+?ZenaY*ZalR;S1NSc1g|;&Cx%&^O8F16Fv#-;{HeqXxVzMz8ybO>o>D1 z!Zg0*UhtC_?aliYDfUbsr^7)m{9P7#*QN>$NM5V03c~h-1;5fsUO#%Mqgs(4dNKgr zP*ZDir*>mrmd~knLiX!{n}Jh0MHOx%H?Qs~XtX3xjfnQkYVZfz;xE2kvudz>UBzzJ z5w^L~Ra9N~cRAH=fobLK2PzNUTGuXL5$@vJBIJtgBe)?#G$ zL-a$>-lAAe1T}z-L>0$p4Y_44w2+N&stu1!%=iyA6uL=IMruKJeXXTnA<4b zNtiZ$-Jq*>o_XW1%g>KZ