From 43ee3595032fd4d9582d3430233599d9a529c40c Mon Sep 17 00:00:00 2001 From: Logo <21302803+Logo121@users.noreply.github.com> Date: Sat, 3 Aug 2024 03:46:05 +0800 Subject: [PATCH] Some more Legacy Computing Symbols (pt 10?) (#2453) * moonlander * rifle, bomb, rocket, frog * doc --- changes/31.1.0.md | 6 + .../src/symbol/pictograph/game-sprite.ptl | 278 +++++++++++++++++- 2 files changed, 268 insertions(+), 16 deletions(-) diff --git a/changes/31.1.0.md b/changes/31.1.0.md index 7de5b5bcc..9111e24b5 100644 --- a/changes/31.1.0.md +++ b/changes/31.1.0.md @@ -7,6 +7,12 @@ - LATIN SMALL LETTER BLACKLETTER E (`U+AB32`) (#2443). - LATIN SMALL LETTER BLACKLETTER O (`U+AB3D`) (#2443). - LATIN SMALL LETTER BLACKLETTER O WITH STROKE (`U+AB3E`) (#2443). + - LEFT-POINTING ROCKET SHIP (`U+1CC56`) ... DOWN-POINTING ROCKET SHIP (`U+1CC59`) (Proposed for Unicode 16; L2/21-235). + - LEFT-POINTING ATOMIC BOMB (`U+1CC60`) ... DOWN-POINTING ATOMIC BOMB (`U+1CC63`) (Proposed for Unicode 16; L2/21-235). + - LEFT-POINTING RIFLE (`U+1CC65`) ... DOWN-POINTING RIFLE (`U+1CC68`) (Proposed for Unicode 16; L2/21-235). + - MOON LANDER (`U+1CDF5`) (Proposed for Unicode 16; L2/21-235). + - UP-POINTING FROG (`U+1CDFB`) (Proposed for Unicode 16; L2/21-235). + - DOWN-POINTING FROG (`U+1CDFC`) (Proposed for Unicode 16; L2/21-235). - MATHEMATICAL FRAKTUR CAPITAL A (`U+1D504`) (#444). - MATHEMATICAL FRAKTUR CAPITAL B (`U+1D505`) (#444). - MATHEMATICAL FRAKTUR CAPITAL E (`U+1D508`) (#444). diff --git a/packages/font-glyphs/src/symbol/pictograph/game-sprite.ptl b/packages/font-glyphs/src/symbol/pictograph/game-sprite.ptl index 2750c4e20..34a7182f0 100644 --- a/packages/font-glyphs/src/symbol/pictograph/game-sprite.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/game-sprite.ptl @@ -33,12 +33,12 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 define heavyGraphicSw : Math.max (graphicSw * 2) (Width * 0.15) define squareBox : new Box Geom.Top Geom.Bot Geom.Left Geom.Right - define [SidewaysBox top bottom left right _left2 _right2] : begin - local left2 : fallback _left2 left - local right2 : fallback _right2 right - local newHeight : (right - left) * (right2 - left2) / (top - bottom) + define [SidewaysBox box _left2 _right2] : begin + local left2 : fallback _left2 box.left + local right2 : fallback _right2 box.right + local newHeight : (box.right - box.left) * (right2 - left2) / (box.top - box.bottom) local midX : mix left2 right2 0.5 - local midY : mix top bottom 0.5 + local midY box.yMid return : new Box midY + (right2 - midX) @@ -46,6 +46,24 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 midX - newHeight / 2 midX + newHeight / 2 + define uiBox : new Box uiTop uiBot uiLeft uiRight + define uiHBox : SidewaysBox uiBox + + define sb : SB * (0.5 * MosaicWidthScalar) + define smallHBox : new Box + mix SymbolMid PlusTop (0.5 * MosaicWidthScalar) + mix SymbolMid PlusBot (0.5 * MosaicWidthScalar) + * sb + MosaicWidth - sb + + define vScalar : Math.sqrt (2 * MosaicWidthScalar) + define smallVBox : new Box + mix SymbolMid PlusTop (0.5 * vScalar) + mix SymbolMid PlusBot (0.5 * vScalar) + sb + 0.5 * (MosaicWidth - Width * vScalar) + (Width * vScalar - sb) + 0.5 * (MosaicWidth - Width * vScalar) + + do "Top-down Vehicles" define scaffold : object set scaffold.xWheelFront : 1.5 / 9 @@ -110,19 +128,19 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 do "Stick Man" - define [StickManScaffold top bottom left right _sw] : begin + define [StickManScaffold box _sw] : begin local baseHeight : uiTop - uiBot - local height : top - bottom + local height : box.top - box.bottom local scale : height / baseHeight local scaffold : object - top top - bot bottom - left left - right right + top box.top + bot box.bottom + left box.left + right box.right stroke : fallback _sw graphicSw - xMiddle : mix left right 0.5 - yMiddle : mix top bottom 0.5 + xMiddle box.xMid + yMiddle box.yMid armRaiseK 0.4 headSize : height / 2.5 legSize : (Width - SB * 2) * scale @@ -175,9 +193,8 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 include : VBar.m [mix dressLeft dressRight 0.7] scaffold.bot (dressBottom - O) scaffold.stroke - define scaffold : StickManScaffold uiTop uiBot uiLeft uiRight - define hBox : SidewaysBox uiTop uiBot uiLeft uiRight - define hScaffold : StickManScaffold hBox.top hBox.bottom hBox.left hBox.right smallGraphicSw + define scaffold : StickManScaffold uiBox + define hScaffold : StickManScaffold uiHBox smallGraphicSw create-glyph [MangleName 'stickMan'] [MangleUnicode 0x1FBC5] : glyph-proc set-width MosaicWidth @@ -204,6 +221,7 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 set-width MosaicWidth include : StickManDressBody scaffold 0 0 + do "Snake Head" define eyeSize : Geom.Size / 8 define mouthWidth : Geom.Size / 3 @@ -265,6 +283,7 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 create-glyph [MangleName "snakeHeadDownClosed"] [MangleUnicode 0x1CC77] : glyph-proc include : SnakeHead 3 0 + do "Energy Waves" define [LeftEnergyWave top bottom left right] : glyph-proc local midX : mix left right 0.5 @@ -303,6 +322,167 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 set-width MosaicWidth include : WithD4Transform midX 1 0 : lambda [] : LeftEnergyWave Geom.Top Geom.Bot Geom.Left Geom.Right + + do "Rifle" + define scaffold : object + set scaffold.postLength : 1 / 6 + set scaffold.postOffset : 1 / 9 + set scaffold.triggerRad : 1 / 8 + + define [RightRifle box] : glyph-proc + include : union + HBar.t box.left box.right [box.mixY : 1 - scaffold.postLength] smallGraphicSw + VBar.r [box.mixX : 1 - scaffold.postOffset] [box.mixY : 1 - scaffold.postLength] box.top smallGraphicSw + VBar.l box.left box.bottom [box.mixY : 1 - scaffold.postLength] (2 * smallGraphicSw) + + local triggerStartX : box.left + [HSwToV : 2 * smallGraphicSw] + local triggerEndY : [box.mixY : 1 - scaffold.postLength] - smallGraphicSw + local triggerRad : (box.right - box.left) * scaffold.triggerRad + include : dispiro + widths.center smallGraphicSw + flat triggerStartX (triggerEndY - triggerRad) [heading Rightward] + archv + curl (triggerStartX + triggerRad) triggerEndY [heading Upward] + + create-glyph [MangleName 'rifleLeft'] [MangleUnicode 0x1CC65] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 0 1 : lambda [] : RightRifle smallHBox + create-glyph [MangleName 'rifleUp'] [MangleUnicode 0x1CC66] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 1 0 : lambda [] : RightRifle smallVBox + create-glyph [MangleName 'rifleRight'] [MangleUnicode 0x1CC67] : glyph-proc + set-width MosaicWidth + include : RightRifle smallHBox + create-glyph [MangleName 'rifleDown'] [MangleUnicode 0x1CC68] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 3 0 : lambda [] : RightRifle smallVBox + + + do "Rocket" + define scaffold : object + set scaffold.width : 1 / 2 + set scaffold.baseHeight : 1 / 4 + set scaffold.tipHeight : 1 / 4 + + define [RightRocket box] : glyph-proc + local rocketLeft : box.mixY (0.5 + scaffold.width / 2) + local rocketRight : box.mixY (0.5 - scaffold.width / 2) + local rocketBase : box.mixX scaffold.baseHeight + local rocketTip : box.mixX (1 - scaffold.tipHeight) + + include : union + spiro-outline + corner box.left box.yMid + corner rocketBase rocketRight + corner rocketTip rocketRight + corner box.right box.yMid + corner rocketTip rocketLeft + corner rocketBase rocketLeft + intersection [MaskAbove box.yMid] : dispiro + widths.center smallGraphicSw + corner box.left box.top + corner [box.mixX : 2 * scaffold.baseHeight] [box.mixY scaffold.width] + intersection [MaskBelow box.yMid] : dispiro + widths.center smallGraphicSw + corner box.left box.bottom + corner [box.mixX : 2 * scaffold.baseHeight] [box.mixY : 1 - scaffold.width] + + create-glyph [MangleName 'rocketLeft'] [MangleUnicode 0x1CC56] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 0 1 : lambda [] : RightRocket smallHBox + create-glyph [MangleName 'rocketUp'] [MangleUnicode 0x1CC57] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 1 0 : lambda [] : RightRocket smallVBox + create-glyph [MangleName 'rocketRight'] [MangleUnicode 0x1CC58] : glyph-proc + set-width MosaicWidth + include : RightRocket smallHBox + create-glyph [MangleName 'rocketDown'] [MangleUnicode 0x1CC59] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 3 0 : lambda [] : RightRocket smallVBox + + + do "Bomb" + define scaffold : object + set scaffold.tailX 0.3 + set scaffold.bodyX 0.15 + + define [RightBomb box] : glyph-proc + local bombLeft : box.mixX scaffold.bodyX + local radius : (box.top - box.bottom) / 2 + + include : union + spiro-outline + corner box.left box.top + corner box.left box.bottom + corner (box.left + graphicSw) box.bottom + corner [box.mixX scaffold.tailX] box.yMid + corner (box.left + graphicSw) box.top + spiro-outline + curl (bombLeft + radius) box.top + archv + g4 bombLeft box.yMid + arcvh + flat (bombLeft + radius) box.bottom + curl (box.right - radius) box.bottom + archv + g4 box.right box.yMid + arcvh + flat (box.right - radius) box.top + # Ellipse.Outline.AtDimens box.top box.bottom [box.mixX scaffold.bodyX] box.right + + create-glyph [MangleName 'bombLeft'] [MangleUnicode 0x1CC60] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 2 0 : lambda [] : RightBomb smallHBox + create-glyph [MangleName 'bombUp'] [MangleUnicode 0x1CC61] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 1 0 : lambda [] : RightBomb smallVBox + create-glyph [MangleName 'bombRight'] [MangleUnicode 0x1CC62] : glyph-proc + set-width MosaicWidth + include : RightBomb smallHBox + create-glyph [MangleName 'bombDown'] [MangleUnicode 0x1CC63] : glyph-proc + set-width MosaicWidth + include : WithD4Transform midX 3 0 : lambda [] : RightBomb smallVBox + + + do "Frog" + define scaffold : object + set scaffold.bodyX 1 + set scaffold.bodyY 0.9 + set scaffold.legY 0.7 + set scaffold.legY2 0.6 + set scaffold.legX 0.2 + set scaffold.legX2 0.4 + set scaffold.sw graphicSw + + define [UpFrog box tfm] : glyph-proc + local Kit : StickFigureKit box tfm heavyGraphicSw + + include : difference + union + Ellipse.Outline.AtDimens + box.mixY scaffold.bodyY + box.mixY (1 - scaffold.bodyY) + box.mixX (1 - scaffold.bodyX) + box.mixX scaffold.bodyX + Kit.RoundSeg 0.5 0.5 0.5 1 0 1 + Kit.RoundSeg 0.5 scaffold.legY2 0 scaffold.legY 0 1 + Kit.RoundSeg 0.5 scaffold.legY2 1 scaffold.legY 0 1 + Kit.RoundSeg scaffold.legX2 0.5 scaffold.legX 0 0 1 + Kit.RoundSeg (1 - scaffold.legX2) 0.5 (1 - scaffold.legX) 0 0 1 + Ellipse.Outline.AtDimens + [box.mixY scaffold.bodyY] - scaffold.sw + [box.mixY : 1 - scaffold.bodyY] + scaffold.sw + [box.mixX : 1 - scaffold.bodyX] + scaffold.sw + [box.mixX scaffold.bodyX] - scaffold.sw + + create-glyph [MangleName 'frogUp'] [MangleUnicode 0x1CDFB] : glyph-proc + set-width MosaicWidth + include : UpFrog squareBox : D4Transform midX 0 0 + create-glyph [MangleName 'frogDown'] [MangleUnicode 0x1CDFC] : glyph-proc + set-width MosaicWidth + include : UpFrog squareBox : D4Transform midX 2 0 + + do "Square Spiral" define directions : list * {.dx 1 .dy 0 .heading Rightward} @@ -341,6 +521,7 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 set-width MosaicWidth include : SquareSpiral Geom.Left Geom.Bot 0 + do "Ladder" create-glyph [MangleName "vertLadder"] [MangleUnicode 0x1CC84] : glyph-proc set-width MosaicWidth @@ -354,6 +535,7 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 include : HBar.b left right Geom.Bot GeometryStroke include : HBar.t left right Geom.Top GeometryStroke + do "Striped Triangles" define stripes : 2 + 2 * MosaicWidthScalar define coTop : mix Geom.Top Geom.Bot (0 - 1 / (2 * stripes)) @@ -384,3 +566,67 @@ glyph-block Symbol-Pictograph-Game-Sprite : for-width-kinds WideWidth4 include : intersection refer-glyph : MangleName "blackTriangleDown" HShade stripes coTop coBot left right + + + do "Moon Lander" + define scaffold : object + set scaffold.tipSize 0.2 + set scaffold.headWidth 0.8 + set scaffold.headHeight (3 / 8) + set scaffold.bodyWidth 0.4 + set scaffold.slantHeight (3 / 8) + set scaffold.baseWidth 0.2 + set scaffold.windowWidth 0.2 + set scaffold.windowTopWidth 0.12 + set scaffold.windowArchDepth 0.1 + set scaffold.windowBot (3 / 8) + set scaffold.windowTop (6 / 8) + set scaffold.footLen 0.25 + set scaffold.legHeight 0.4 + set scaffold.legTopHeight 0.5 + + define [Moonlander top bottom left right sw] : glyph-proc + local midX : mix left right 0.5 + local y1 : mix top bottom scaffold.headHeight + local y2 : mix bottom top scaffold.slantHeight + local bodyLeft : mix left right (0.5 - scaffold.bodyWidth / 2) + local bodyRight : mix left right (0.5 + scaffold.bodyWidth / 2) + + local windowTop : mix bottom top scaffold.windowTop + local windowBot : mix bottom top scaffold.windowBot + local windowY3 : mix bottom top (scaffold.windowTop - scaffold.windowArchDepth) + local windowLeft : mix left right (0.5 - scaffold.windowWidth / 2) + local windowRight : mix left right (0.5 + scaffold.windowWidth / 2) + + local legY2 : mix bottom top scaffold.legHeight + local legY3 : mix bottom top scaffold.legTopHeight + include : difference + union + spiro-outline + corner [mix left right (0.5 + scaffold.headWidth / 2)] y1 + corner [mix left right (0.5 + scaffold.tipSize / 2)] top + corner [mix left right (0.5 - scaffold.tipSize / 2)] top + corner [mix left right (0.5 - scaffold.headWidth / 2)] y1 + corner bodyLeft y1 + corner bodyLeft y2 + corner [mix left right (0.5 - scaffold.baseWidth / 2)] bottom + corner [mix left right (0.5 + scaffold.baseWidth / 2)] bottom + corner bodyRight y2 + corner bodyRight y1 + HBar.b left [mix left right scaffold.footLen] bottom sw + HBar.b right [mix right left scaffold.footLen] bottom sw + VBar.l left bottom legY2 sw + VBar.r right bottom legY2 sw + dispiro [widths.rhs sw] [flat left legY2] [curl midX legY3] + dispiro [widths.lhs sw] [flat right legY2] [curl midX legY3] + spiro-outline + corner windowLeft windowY3 + corner windowLeft windowBot + corner windowRight windowBot + corner windowRight windowY3 + corner [mix left right (0.5 + scaffold.windowTopWidth / 2)] windowTop + corner [mix left right (0.5 - scaffold.windowTopWidth / 2)] windowTop + + create-glyph [MangleName "moonLander"] [MangleUnicode 0x1CDF5] : glyph-proc + set-width MosaicWidth + include : Moonlander top bottom left right graphicSw