From fa46a76008b4300ee893fabf09d48ec9cdbbb686 Mon Sep 17 00:00:00 2001 From: David Hudson Date: Thu, 5 Mar 2026 20:34:37 -0800 Subject: [PATCH] add cyberpunk-red --- CHANGELOG.md | 4 ++ README.md | 15 ++++ docs/screenshot_cyberpunkred.jpg | Bin 0 -> 21181 bytes src/scripts/TokenNoteHoverHUD.js | 3 + src/scripts/systems/cyberpunk-red-core.js | 79 ++++++++++++++++++++++ 5 files changed, 101 insertions(+) create mode 100644 docs/screenshot_cyberpunkred.jpg create mode 100644 src/scripts/systems/cyberpunk-red-core.js diff --git a/CHANGELOG.md b/CHANGELOG.md index b5801c2..1008667 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ [Token Note Hover](https://foundryvtt.com/packages/token-note-hover) +## [4.0.6](https://github.com/jendave/token-note-hover/blob/main/CHANGELOG.md) (2026-03-xx) + +* Added support for [Cyberpunk RED](https://foundryvtt.com/packages/cyberpunk-red-core) + ## [4.0.5](https://github.com/jendave/token-note-hover/blob/main/CHANGELOG.md) (2026-02-25) * Verified for Foundry v14. diff --git a/README.md b/README.md index 30dd25d..474e42e 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ Many systems are directly supported by [Token Note Hover](https://foundryvtt.com * [Cairn](#cairn) * [Call of Cthulhu 7th edition](#call-of-cthulhu-7th-edition) * [Custom System Builder](#custom-system-builder) +* [Cyberpunk RED](https://foundryvtt.com/packages/cyberpunk-red-core) * [Cypher System](#cypher-system) * [D\&D 5E](#dd-5e) * [Daggerheart](#daggerheart) @@ -232,6 +233,20 @@ Then in a Character Actor, use the Template with the following fields: | **Character** | Notes | | | Private Notes | +### Cyberpunk RED + +[Cyberpunk RED](https://foundryvtt.com/packages/cyberpunk-red-core) + +![Screenshot](https://github.com/jendave/token-note-hover/blob/main/docs/screenshot_cyberpunkred.jpg?raw=true) + +| Actor Type | Note Location | +| ---------------- | ---------------- | +| **Black ICE** | Notes | +| **Character** | Player Notes | +| **Container** | Item List | +| **Demon** | Notes | +| **Mook (NPC)** | Player Notes | + ### Cypher System [Cypher System](https://foundryvtt.com/packages/cyphersystem) diff --git a/docs/screenshot_cyberpunkred.jpg b/docs/screenshot_cyberpunkred.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4bffddda7bf922472f8078826a900530e6c66f1 GIT binary patch literal 21181 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

McvR_v8&h zdY8FR-r|j#G5J{P?;)WrW_9KP53Pzuua1_0%>5sRESw5W_co4r9qbEV9@F8;rd{Fe zaZ685X;a}YGI4!fe7D=OZ767(h1$+*GB;)HD8@E4!ldnW>Z~)lz|Ag3e*>h*(8qHp z{I?|7b)!$edCQw}@Fc9i58;^;)&36Bs#b#sG;d;Tc30D9C6jIi-V%F!-9UNf<8;PM zX~Gq|toZy#y%$b6vy-i==G>mGRQDhxY4q1;r!m+17b<@2x-kDmX)^$$BrNlQ`knu( zktsH8!CTD^r@Y_RsQ6Mfx#+I3E8T|s0#8lby@Es2-#NPvIT+USiZJk)HUs&$%k*aX znZ+pbGL7o%(blmo+NGZ5zVJmaFSY3ihmy|sElpnbV)HF^5z3h<$j&M7Uevf|MBU(( z`%&_V4zua8~T5bJ~FMr?Sg^q#;f9ce}I35+fU%) z)~*ya&Ok2#<;C##nk+}(kRK~8HPndOX!xWe(K6sR=!CsZp9gxnON@`!xrnji1d}oN zm?$9_lu$bCWYNFF=Rf?uZU6`R_x6oCD6j4bIV5t9*63HFN}d#G>XbZNMH$kSUC+0I{>xSbdMd`K%s-hL_9qN zZI{#rUcs<|Z$OPPy-XWaEE=C6I}0HPVA)pqIc~6K>Zff`fpUPpC?DTNY;d(;ac}XMpG>P)(2gGlpL8kGHGjdx~wS zBTML?F{Y!o8ipQ(4F~87c!R%KLT>c$k{~JhhzvF&aYyucHKwol$HYc5ycyzp+lwfWIrAIDId=dqpnO1wt7IQ z+H8a8?1xVIzWrJhSPKaat~j(=4iwrWCjOV-9hjMh|JN_IxXO}$e;x53qji;yba3ZS ze(Oa@VQ{s{uJEZBOl9JK#_#?a_xtk>`oD_%9isaFFAux_5iD$8Z=^HuW?Itu;4ZWo zIs@A;p&*T8mx%Pw(3@aD{eguMr^f#q4vZa&h3j9nq(J z74l^lbw94#!OH?oIQV$I#-qS#+$J23xJ0;*S=op}r*&&W5SK?4zSca8`ygpUWfTaZ zfV%dJF6hPi?%5sc&K0Xm3g_^P-#M_Js?Xta5;yV5tlQV`rCWIJd$0eD4tIgNs?kS- zHJ66%=-$;vJX_M`OkKhQb@_rz?NcLBm&iNwcDCJMYcT)G9>i-NCfwOI;UMDB1oQ{W zALcqaDjFP!@kE=His`v*fS)VLpZIm81^?VtCNyZ*TiGo+0-zsSm0au>#FR}xLky{rS(y>b%xGId!Vp|%z zK)+!)C<)%^Ie9|Yskrmts}MzUkmXi{pXvjNZ*QJJ9L2dMMSG#`(Q%uC$NYL=*3IxQ|DPr94yX|7 z@thjA2PDAYbX76@<~9>Ha1lIjBaD;U*!<-^KKp%|J9CyBQbZLAdN?VERR|4{tQwAB zef@7$V>Pb=yPY0>s}L!0$c3hcuEgeLd>iRRE%#qExbkG1&ilZ72U_`2EWerM;a?&{ z6n`%tj0QD>E0m94{3C3is|37J`gyA)o>F{-LmaI_e^7xn{*1Ywz)}zyI2H-M@7hjd ztrvY+K03W=P;DkxTln%cN~LVRws%tv<(sT3tdyzJI9_0HMDs?#dipTvl`&T8^Af7` z2XPX-ce;f4$DYKT_r2Gq(SW(s`>hLlOB}rQodK_#J`4nSUOnRUnzw_e9}opGa}sg2 zln;?#zK!IreQy~i05*|6SP%H3P0LB|vh%^T{5|NcPHGzN?r@`t^5QSHeCv-bPnl+P zEdUZbZuW$X;K5|gGZ4-;h?l9|)c3v|p>x*f-?_xp@9T99-sas-j%JyP)ErezsMxAF z4!oI}*Hlq^9iYu|xTSpNQ|Xn5&W@8KhKI)A`7@J3)7bR5tSTLIV_HQyGfJ97cEZ9}d>R~5X z0W;1-&#_Dsu0Q!!RN(^>@piOfujUyyzfVFr)-eSM&kjfC&f+vvhz@D%5=6T6K>r9F zXXurk&7@C~O_|MtFYAAN&Be{NfpHu$PK?oA&zS{};)vNsu&Bu|@`uZ3^Apbi=5||< zLe<=PKY|zqc9f8+uI+&uObxN-dK&g%Ac?r&p|_H3-G+x?Vhb_lOYp?HeqWP}UaQtr z{krv%nkt_MO0%UOrgw;M_o@apWUN}zTdkZ`#phDJY;^J*X~n(f@w&mM@4s4`heY!r zq?NK<-lPEC^@A8`*^WjvuQaZ^=1+?SgqK`!S8>t&i##ZFox6c!7H{Rt#kv+(4$jG^ z!Hr(ULxfB$3p%qG!c?(k*V884G%51ro{jyZCBe>#mZfeOdE1FJi1AWH8n0t-{^=VL z=dmUQW#Qhvhnp5{yhQN8qEk1{KR+k>hWM%NYJ2uM%`H?f4Z1&a8D~iR90EJ`BM{w- zVm0s!hRhmi&hWeOSwvt43nK+tXr8D?K3yn?;;X4|K`uasZF=DCV*&Jzy~j7%6^p6N z?6(})CU9HNd!IxqVQX^J?zM?xJ?-JnM!tc8o-h3QjNWPq+!p2LUcU-{BLY3tKvFCb z!yQ3?CI4P$=-u;Ucrx?^_^E&=q~38x?!zmG?q}7`Tb+n2(Z0)$pnsC`JG$X5=$N0j zewVSXwC!_Rxk3<=(z%hjqf!3jvIckObJO)Bp~Iy3>Z`f0J58&~3%Q~c>_>dFNx_v&xdsc<Wrq8n%IIC6QfNTE~&YrCp7|a-yLLErgfbn=rRhjcwL}0*Eau#h4=SMCP;4%RcVvMC4My-)k(^61M>Z$#f5IM3;y36PY}K`q?GgO!Toj zEHS&{XEHhqohu``!DjULlKu05oD|GISXR}*X&VC0)TYvalU!;1Ew0x1Sj=@f9EIVD zm>Qh$IUH^1{eYsOlp038g=p``egt>WTDbzHrh5HY*4sMy5tl01?^Oy!yi5HulV-a9 z@sVtI>xR6S@t1hL{Y=-N3h@aF#p`gi7oowX-tT40jm7ifWCCY%A-YvsC1xVXknV(H zq^D`Yvd06c2BpbGD~)D-F@n#P7~9Torm*+J=7947Vv<=~@`r z-$JV$sLN)oau?Gib!gsTO@)4iM*Heasu;ZG1fWAK`L*!>A`GB)ao-lV32h6ov<~iT ztg5DDGBHo$V=jgWOWY%^byXUCO?1bXvx)8zu%-^Zz34H9F)3>>sk&A?fB z`X?mR!v*Hlo7=`FZ6->8ly%NaOV$fM0&-b>xdO@a{YZ+Guy`OW+B8i2CReW0 zKYjVSzQ&tzY$*g_jHvam6V86NNGQCKSXqFl;BLJYS;s_&{ZVS|nQh|4fYN1*nNArh z{*EwD3K=`~X21j9T(ZNAUGnZW?bnm@)6QYy+I?QWNp+DnoZe=dkRw-?%Pp zc?hPjs|Ciz>g!IU5gDp z%l-5f6xY**u8APPeC6%oLIaqP-yQEw081~aG!OByoHBCDWtSQ$pNZdmZ0{R7#+4j% zA-3e3AR|M=qy8DNQD_sBrO-*e>tF9LCPz^;O+DcIh#IsyN>r z`9P7)X-3`AjHj#l*z&lEgc}*edWDEFN&BMc-Q2S<+=ZtX43P-G*ol@)+R8cIgI3kg zz4i8HDcU)qDDHlcmWonl905rf4V}hG>WrFDoPwOU@U!;SB||U7;+mM15Z)U%yL5w3 z)_VEi%fq=g6m`e)_Ke5pAbOQl%ZE;m_F{m`+(zVjD{!@6(6=$UUE8Q$kPqFG(1x&B zpE&v%0o#&W=#c@S-b0t#6ZL=u%IOnom}v7q+V}>qZtKx`YwDiZ@t@An_AaoM-|N1T z4;*uZ@t|wk!@!MxyJ~*x36>=^#haKNZt4uPIP$7uU$IUF#Y(@7e!euhzahQC(CW45 z)O_kBcT3#vtd=A*kG}t9)GeiMAQn%EjW3B%j!B!FtR2pnB$gWk51JZ=SUNFE{se1* z@)e|Re@@x+^ulUVHHI@5$vOu?mV1Tqmf%5qy+^P^9|t1O4`p7T*WAGer_2P_|D&mQlA`{jPL5YTm4qeg&=ctnaD4x>fwkw=&Nd!z?KKcsIyp423F6XR6 z0&>-dGUAeKf%E9Yy8$AoLH}B1t>`Ogo}h+VM^=yU(~=zu9_PMrd+(~UDr{~Rd z*WUG%bUa53TGNUaiyyyWk_kd^Z+4R=d=*^~#Aea{{52@RXa{y`d`e5CrR;iUcW|5g literal 0 HcmV?d00001 diff --git a/src/scripts/TokenNoteHoverHUD.js b/src/scripts/TokenNoteHoverHUD.js index ec47a6b..e1cdee0 100644 --- a/src/scripts/TokenNoteHoverHUD.js +++ b/src/scripts/TokenNoteHoverHUD.js @@ -34,6 +34,7 @@ import { dcc } from './systems/dcc.js'; import { mutantyearzero } from './systems/mutant-year-zero.js'; import { wod5e } from './systems/wod5e.js'; import { universalTabletopSystem } from './systems/universal-tabletop-system.js'; +import { cyberpunkRedCore } from './systems/cyberpunk-red-core.js'; /** * A HUD extension that shows the Note preview @@ -174,6 +175,8 @@ export default class TokenNoteHoverHUD extends foundry.applications.hud.BasePlac tempContent = await wod5e(actor, displayImages); } else if (game.data.system.id === 'universal-tabletop-system') { tempContent = await universalTabletopSystem(actor, displayImages); + } else if (game.data.system.id === 'cyberpunk-red-core') { + tempContent = await cyberpunkRedCore(actor, displayImages); } diff --git a/src/scripts/systems/cyberpunk-red-core.js b/src/scripts/systems/cyberpunk-red-core.js new file mode 100644 index 0000000..63f6507 --- /dev/null +++ b/src/scripts/systems/cyberpunk-red-core.js @@ -0,0 +1,79 @@ +import CONSTANTS from '../constants.js'; +import { processNotes } from "../textUtil.js"; + +export async function cyberpunkRedCore(actor, displayImages) { + // Using a guard here looks cleaner + if (!actor) { + return null; + } + + const actorIsOwner = actor.isOwner ?? true; + + switch (actor.type) { + case "character": + if (game.settings.get(CONSTANTS.MODULE_ID, 'displayPC')) { + return await getCharacterNotes(displayImages, actor, actorIsOwner); + } else { + return null; + } + case "container": + if (game.settings.get(CONSTANTS.MODULE_ID, 'displayPC')) { + return await getContainerNotes(displayImages, actor, actorIsOwner); + } else { + return null; + } + case "demon": + if (game.settings.get(CONSTANTS.MODULE_ID, 'displayPC')) { + return await getDemonNotes(displayImages, actor, actorIsOwner); + } else { + return null; + } + case "blackIce": + if (game.settings.get(CONSTANTS.MODULE_ID, 'displayPC')) { + return await getDemonNotes(displayImages, actor, actorIsOwner); + } else { + return null; + } + case "mook": + if (game.settings.get(CONSTANTS.MODULE_ID, 'displayNPC')) { + return await getCharacterNotes(displayImages, actor, actorIsOwner); + } else { + return null; + } + default: + return null; + } +} + +async function getCharacterNotes(displayImages, actor, actorIsOwner) { + return await processNotes(actor.system?.information?.notes, actorIsOwner, displayImages); +} + +async function getDemonNotes(displayImages, actor, actorIsOwner) { + return await processNotes(actor.system?.notes, actorIsOwner, displayImages); +} + +async function getContainerNotes(displayImages, actor, actorIsOwner) { + let containerNote = ""; + let test =""; + for (let i = 0; i < actor.items.contents.length; i += 1) { + containerNote = containerNote.concat("

"); + containerNote = containerNote.concat(actor.items.contents[i].name); + containerNote = containerNote.concat("
"); + containerNote = containerNote.concat("

"); + containerNote = containerNote.concat(actor.items.contents[i].type); + containerNote = containerNote.concat("

"); + } + return await processNotes(containerNote, actorIsOwner, displayImages); +} + +async function getNpcNotes(displayImages, actor, actorIsOwner) { + const privateNotes = actor.system?.information?.notes; + let notes = ""; + + if (!game.settings.get(CONSTANTS.MODULE_ID, 'hidePrivateNotes') && game.user.isGM && privateNotes) { + notes = privateNotes; + } + + return await processNotes(notes, actorIsOwner, displayImages); +}