@turnipxenon/pineapple 2.4.25 → 2.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +35 -29
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte +51 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.js +1 -0
- package/.svelte-kit/__package__/components/overrideable_meta/index.d.ts +2 -0
- package/.svelte-kit/__package__/components/overrideable_meta/index.js +3 -0
- package/.svelte-kit/__package__/index.d.ts +1 -0
- package/.svelte-kit/__package__/index.js +2 -0
- package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte +184 -184
- package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte +268 -268
- package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte +33 -32
- package/.svelte-kit/__package__/template/Seaweed/seaweed.postcss +133 -133
- package/.svelte-kit/ambient.d.ts +0 -2
- package/.svelte-kit/generated/client/nodes/5.js +2 -0
- package/.svelte-kit/generated/client/nodes/6.js +2 -0
- package/.svelte-kit/generated/client/nodes/7.js +2 -0
- package/.svelte-kit/generated/client/nodes/8.js +1 -1
- package/.svelte-kit/generated/server/internal.js +1 -1
- package/.svelte-kit/types/route_meta_data.json +7 -2
- package/.svelte-kit/types/src/routes/(pineapple)/pineapple/$types.d.ts +3 -1
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +4 -2
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/actual/$types.d.ts +3 -1
- package/dist/components/overrideable_meta/OverridableMeta.svelte +51 -0
- package/dist/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
- package/dist/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
- package/dist/components/overrideable_meta/OverridableMetaProps.js +1 -0
- package/dist/components/overrideable_meta/index.d.ts +2 -0
- package/dist/components/overrideable_meta/index.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/template/Seaweed/GameSection.svelte +184 -184
- package/dist/template/Seaweed/ProjectSection.svelte +268 -268
- package/dist/template/Seaweed/SeaweedTemplate.svelte +33 -32
- package/dist/template/Seaweed/seaweed.postcss +133 -133
- package/package.json +1 -1
- package/src/lib/components/overrideable_meta/OverridableMeta.svelte +56 -0
- package/src/lib/components/overrideable_meta/OverridableMetaProps.ts +7 -0
- package/src/lib/components/overrideable_meta/index.ts +4 -0
- package/src/lib/index.ts +3 -0
- package/src/lib/template/Seaweed/GameSection.svelte +213 -213
- package/src/lib/template/Seaweed/ProjectSection.svelte +298 -298
- package/src/lib/template/Seaweed/SeaweedTemplate.svelte +36 -35
- package/src/lib/template/Seaweed/seaweed.postcss +133 -133
- package/src/lib/util/util.ts +38 -38
- package/src/routes/(pineapple)/+layout.svelte +0 -15
- package/src/routes/(pineapple)/+page.svelte +0 -12
- package/src/routes/(pineapple)/pineapple/+page.svelte +0 -10
- package/src/routes/(pineapple)/pineapple/+page.ts +8 -0
- package/src/routes/(seaweed)/portfolio/+page.svelte +0 -11
- package/src/routes/(seaweed)/portfolio/+page.ts +8 -0
- package/src/routes/(seaweed)/portfolio/actual/+page.ts +8 -0
- package/src/routes/+layout.svelte +5 -2
package/.idea/workspace.xml
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
<option name="autoReloadType" value="SELECTIVE" />
|
|
5
5
|
</component>
|
|
6
6
|
<component name="ChangeListManager">
|
|
7
|
-
<list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="Add
|
|
7
|
+
<list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="Add OverridableMeta component">
|
|
8
|
+
<change beforePath="$PROJECT_DIR$/src/lib/components/overrideable_meta/OverridableMeta.svelte" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/components/overrideable_meta/OverridableMeta.svelte" afterDir="false" />
|
|
9
|
+
</list>
|
|
8
10
|
<option name="SHOW_DIALOG" value="false" />
|
|
9
11
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
10
12
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
@@ -20,7 +22,6 @@
|
|
|
20
22
|
<list>
|
|
21
23
|
<option value="ChildA" />
|
|
22
24
|
<option value="DeepLazyComponent" />
|
|
23
|
-
<option value="+page.svelte" />
|
|
24
25
|
<option value="StickySeparatorElement" />
|
|
25
26
|
<option value="CarouselElement" />
|
|
26
27
|
<option value="SocialSection" />
|
|
@@ -36,13 +37,16 @@
|
|
|
36
37
|
<option value="GameSection" />
|
|
37
38
|
<option value="ProjectSection" />
|
|
38
39
|
<option value="TypeScript File" />
|
|
40
|
+
<option value="+page.svelte" />
|
|
41
|
+
<option value="OverrideableMeta" />
|
|
42
|
+
<option value="index.ts" />
|
|
39
43
|
</list>
|
|
40
44
|
</option>
|
|
41
45
|
</component>
|
|
42
46
|
<component name="Git.Settings">
|
|
43
47
|
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
|
44
48
|
<map>
|
|
45
|
-
<entry key="$PROJECT_DIR$" value="
|
|
49
|
+
<entry key="$PROJECT_DIR$" value="main" />
|
|
46
50
|
</map>
|
|
47
51
|
</option>
|
|
48
52
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
@@ -84,7 +88,7 @@
|
|
|
84
88
|
"WebServerToolWindowFactoryState": "false",
|
|
85
89
|
"git-widget-placeholder": "turnip/dev",
|
|
86
90
|
"ignore.virus.scanning.warn.message": "true",
|
|
87
|
-
"last_opened_file_path": "C:/Users/Pumpkin/Projects/Web/pineapple/src/
|
|
91
|
+
"last_opened_file_path": "C:/Users/Pumpkin/Projects/Web/pineapple/src/routes/(seaweed)/portfolio/actual",
|
|
88
92
|
"node.js.detected.package.eslint": "true",
|
|
89
93
|
"node.js.detected.package.tslint": "true",
|
|
90
94
|
"node.js.selected.package.eslint": "(autodetect)",
|
|
@@ -104,20 +108,21 @@
|
|
|
104
108
|
}]]></component>
|
|
105
109
|
<component name="RecentsManager">
|
|
106
110
|
<key name="CopyFile.RECENT_KEYS">
|
|
111
|
+
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(seaweed)\portfolio\actual" />
|
|
112
|
+
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(seaweed)\portfolio" />
|
|
113
|
+
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\pineapple" />
|
|
107
114
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\assets\placeholder" />
|
|
108
115
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\about" />
|
|
109
|
-
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\scripts\pineapple_fiber" />
|
|
110
|
-
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\pineapple" />
|
|
111
|
-
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\components\pineapple\toast\custom-toast" />
|
|
112
116
|
</key>
|
|
113
117
|
<key name="MoveFile.RECENT_KEYS">
|
|
118
|
+
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\components\overrideable_meta" />
|
|
114
119
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\types" />
|
|
115
120
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib" />
|
|
116
121
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\template\Seaweed" />
|
|
117
122
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\about" />
|
|
118
|
-
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)" />
|
|
119
123
|
</key>
|
|
120
124
|
<key name="es6.move.members.recent.items">
|
|
125
|
+
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\types\RootLayoutProps.ts" />
|
|
121
126
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\util\util.ts" />
|
|
122
127
|
</key>
|
|
123
128
|
</component>
|
|
@@ -219,23 +224,8 @@
|
|
|
219
224
|
<workItem from="1711108187279" duration="1163000" />
|
|
220
225
|
<workItem from="1711115902471" duration="148000" />
|
|
221
226
|
<workItem from="1711116299202" duration="1291000" />
|
|
222
|
-
<workItem from="1711179012668" duration="
|
|
223
|
-
|
|
224
|
-
<task id="LOCAL-00041" summary="Turn the portfolio site into a template">
|
|
225
|
-
<option name="closed" value="true" />
|
|
226
|
-
<created>1710129280477</created>
|
|
227
|
-
<option name="number" value="00041" />
|
|
228
|
-
<option name="presentableId" value="LOCAL-00041" />
|
|
229
|
-
<option name="project" value="LOCAL" />
|
|
230
|
-
<updated>1710129280477</updated>
|
|
231
|
-
</task>
|
|
232
|
-
<task id="LOCAL-00042" summary="Add content replacer v1">
|
|
233
|
-
<option name="closed" value="true" />
|
|
234
|
-
<created>1710193203814</created>
|
|
235
|
-
<option name="number" value="00042" />
|
|
236
|
-
<option name="presentableId" value="LOCAL-00042" />
|
|
237
|
-
<option name="project" value="LOCAL" />
|
|
238
|
-
<updated>1710193203814</updated>
|
|
227
|
+
<workItem from="1711179012668" duration="14397000" />
|
|
228
|
+
<workItem from="1711206704484" duration="3335000" />
|
|
239
229
|
</task>
|
|
240
230
|
<task id="LOCAL-00043" summary="Testing toggleable content">
|
|
241
231
|
<option name="closed" value="true" />
|
|
@@ -613,7 +603,23 @@
|
|
|
613
603
|
<option name="project" value="LOCAL" />
|
|
614
604
|
<updated>1711192223071</updated>
|
|
615
605
|
</task>
|
|
616
|
-
<
|
|
606
|
+
<task id="LOCAL-00090" summary="Hide advanced settings when letChaos is true">
|
|
607
|
+
<option name="closed" value="true" />
|
|
608
|
+
<created>1711193116101</created>
|
|
609
|
+
<option name="number" value="00090" />
|
|
610
|
+
<option name="presentableId" value="LOCAL-00090" />
|
|
611
|
+
<option name="project" value="LOCAL" />
|
|
612
|
+
<updated>1711193116101</updated>
|
|
613
|
+
</task>
|
|
614
|
+
<task id="LOCAL-00091" summary="Add OverridableMeta component">
|
|
615
|
+
<option name="closed" value="true" />
|
|
616
|
+
<created>1711210030592</created>
|
|
617
|
+
<option name="number" value="00091" />
|
|
618
|
+
<option name="presentableId" value="LOCAL-00091" />
|
|
619
|
+
<option name="project" value="LOCAL" />
|
|
620
|
+
<updated>1711210030593</updated>
|
|
621
|
+
</task>
|
|
622
|
+
<option name="localTasksCounter" value="92" />
|
|
617
623
|
<servers />
|
|
618
624
|
</component>
|
|
619
625
|
<component name="TypeScriptGeneratedFilesManager">
|
|
@@ -671,8 +677,6 @@
|
|
|
671
677
|
</option>
|
|
672
678
|
</component>
|
|
673
679
|
<component name="VcsManagerConfiguration">
|
|
674
|
-
<MESSAGE value="Add custom toast" />
|
|
675
|
-
<MESSAGE value="Add simple text toast and toast queue" />
|
|
676
680
|
<MESSAGE value="Enforce stricter typing for Toast components" />
|
|
677
681
|
<MESSAGE value="Add dismissable toast" />
|
|
678
682
|
<MESSAGE value="Adjust default toast body styling and add shadow to toast" />
|
|
@@ -696,6 +700,8 @@
|
|
|
696
700
|
<MESSAGE value="Refactor GameSection out of SeaweedTemplate" />
|
|
697
701
|
<MESSAGE value="Remove unnecessary imports and variables in SeaweedTemplate" />
|
|
698
702
|
<MESSAGE value="Add page query param creator" />
|
|
699
|
-
<
|
|
703
|
+
<MESSAGE value="Hide advanced settings when letChaos is true" />
|
|
704
|
+
<MESSAGE value="Add OverridableMeta component" />
|
|
705
|
+
<option name="LAST_COMMIT_MESSAGE" value="Add OverridableMeta component" />
|
|
700
706
|
</component>
|
|
701
707
|
</project>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
OverridableMeta is convenient Svelte component allowing each page to override the head meta values
|
|
3
|
+
based on their +page.ts.
|
|
4
|
+
|
|
5
|
+
For example:
|
|
6
|
+
<code>
|
|
7
|
+
// +page.ts
|
|
8
|
+
|
|
9
|
+
import type { OverridableMetaProps } from "../..";
|
|
10
|
+
|
|
11
|
+
export const load = async (): Promise<OverridableMetaProps> => {
|
|
12
|
+
return {
|
|
13
|
+
title: "CustomTitle",
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
</code>
|
|
17
|
+
-->
|
|
18
|
+
|
|
19
|
+
<script>import WebThumbnailImage from "../../assets/placeholder/placeholder_circle.png";
|
|
20
|
+
export let rootUrl = "http://localhost:5173";
|
|
21
|
+
export let title = "Welcome to my portfolio";
|
|
22
|
+
export let ogTitle = "Turnip time!";
|
|
23
|
+
export let ogDescription = "Welcome to Turnip's test portfolio";
|
|
24
|
+
export let ogImage = WebThumbnailImage;
|
|
25
|
+
import { page } from "$app/stores";
|
|
26
|
+
const data = {
|
|
27
|
+
title: "Welcome to my portfolio",
|
|
28
|
+
ogUrl: "https://www.crouton.net/",
|
|
29
|
+
ogTitle: "Turnip time!",
|
|
30
|
+
ogDescription: "Welcome to Turnip's test portfolio",
|
|
31
|
+
ogImage: WebThumbnailImage
|
|
32
|
+
};
|
|
33
|
+
page.subscribe((p) => {
|
|
34
|
+
const pageData = p.data;
|
|
35
|
+
data.title = pageData.title ?? title;
|
|
36
|
+
data.ogUrl = `${rootUrl}${p.url.pathname}`;
|
|
37
|
+
data.ogTitle = pageData.ogTitle ?? ogTitle;
|
|
38
|
+
data.ogDescription = pageData.ogDescription ?? ogDescription;
|
|
39
|
+
data.ogImage = pageData.ogImage ?? ogImage;
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<svelte:head>
|
|
44
|
+
<meta charset="utf-8" />
|
|
45
|
+
<title>{data.title}</title>
|
|
46
|
+
<meta name="twitter:card" content="summary" />
|
|
47
|
+
<meta property="og:url" content={data.ogUrl} />
|
|
48
|
+
<meta property="og:title" content={data.ogTitle} />
|
|
49
|
+
<meta property="og:description" content={data.ogDescription} />
|
|
50
|
+
<meta property="og:image" content={data.ogImage} />
|
|
51
|
+
</svelte:head>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
rootUrl?: string | undefined;
|
|
5
|
+
title?: string | undefined;
|
|
6
|
+
ogTitle?: string | undefined;
|
|
7
|
+
ogDescription?: string | undefined;
|
|
8
|
+
ogImage?: any;
|
|
9
|
+
};
|
|
10
|
+
events: {
|
|
11
|
+
[evt: string]: CustomEvent<any>;
|
|
12
|
+
};
|
|
13
|
+
slots: {};
|
|
14
|
+
};
|
|
15
|
+
type OverridableMetaProps_ = typeof __propDef.props;
|
|
16
|
+
export { OverridableMetaProps_ as OverridableMetaProps };
|
|
17
|
+
export type OverridableMetaEvents = typeof __propDef.events;
|
|
18
|
+
export type OverridableMetaSlots = typeof __propDef.slots;
|
|
19
|
+
export default class OverridableMeta extends SvelteComponent<OverridableMetaProps_, OverridableMetaEvents, OverridableMetaSlots> {
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -2,6 +2,7 @@ export { default as PineappleLayoutBase } from "./components/pineapple/Pineapple
|
|
|
2
2
|
export { default as SeaweedTemplate } from "./template/Seaweed/SeaweedTemplate.svelte";
|
|
3
3
|
export { default as LazyAsset } from "./components/LazyAsset.svelte";
|
|
4
4
|
export { default as Card } from "./components/Card.svelte";
|
|
5
|
+
export * from "./components/overrideable_meta/index.ts";
|
|
5
6
|
export * from "./components/dialog_manager/DialogManagerStore";
|
|
6
7
|
export * from "./components/dialog_manager/DialogManager";
|
|
7
8
|
export * from "./components/dialog_manager/DialogUtils";
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
// noinspection JSUnusedGlobalSymbols
|
|
1
2
|
export { default as PineappleLayoutBase } from "./components/pineapple/PineappleBaseLayout.svelte";
|
|
2
3
|
export { default as SeaweedTemplate } from "./template/Seaweed/SeaweedTemplate.svelte";
|
|
3
4
|
export { default as LazyAsset } from "./components/LazyAsset.svelte";
|
|
4
5
|
export { default as Card } from "./components/Card.svelte";
|
|
6
|
+
export * from "./components/overrideable_meta/index.ts";
|
|
5
7
|
export * from "./components/dialog_manager/DialogManagerStore";
|
|
6
8
|
export * from "./components/dialog_manager/DialogManager";
|
|
7
9
|
export * from "./components/dialog_manager/DialogUtils";
|
|
@@ -21,187 +21,187 @@ const chefWingsWarning = {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
</script>
|
|
25
|
-
|
|
26
|
-
<Card>
|
|
27
|
-
<div class="section-card title-card" slot="content">
|
|
28
|
-
<h1 class="text-center">Games</h1>
|
|
29
|
-
</div>
|
|
30
|
-
</Card>
|
|
31
|
-
|
|
32
|
-
<section class="games-section">
|
|
33
|
-
|
|
34
|
-
<Card>
|
|
35
|
-
<section class="game-card" slot="content">
|
|
36
|
-
<video playsinline autoplay muted loop preload="none">
|
|
37
|
-
video unavailable. original video contains pengi gameplay showing the dynamic dialog
|
|
38
|
-
layout and character animation.
|
|
39
|
-
<source src={HeaderPengi} type="video/mp4">
|
|
40
|
-
</video>
|
|
41
|
-
|
|
42
|
-
<section class="game-card-body">
|
|
43
|
-
|
|
44
|
-
<h1>Pengi</h1>
|
|
45
|
-
|
|
46
|
-
<blockquote>
|
|
47
|
-
Well well, quite the dreamer, aren’t you? Might be hard to get in... costs a lot of
|
|
48
|
-
money...
|
|
49
|
-
</blockquote>
|
|
50
|
-
|
|
51
|
-
<p>
|
|
52
|
-
Pengi is a text-based adventure made in <span class="qt-unity">Unity</span>. I acted as the sole
|
|
53
|
-
programmer for the team. Most of the work revolves around UI and creating <a
|
|
54
|
-
href="https://yarnspinner.dev/" target="_blank">YarnSpinner</a> commands for writers
|
|
55
|
-
to use to create expressive stage directions in the script.
|
|
56
|
-
</p>
|
|
57
|
-
|
|
58
|
-
<section class="game-link-section">
|
|
59
|
-
<button type="button" class="game-button turnip-button"
|
|
60
|
-
role="link"
|
|
61
|
-
title="https://github.com/GreenTea-M/ProjectPengi"
|
|
62
|
-
on:click={()=> window.open("https://github.com/GreenTea-M/ProjectPengi")}>
|
|
63
|
-
<img alt="github icon" src={GithubIcon}>
|
|
64
|
-
</button>
|
|
65
|
-
<button type="button" class="game-button turnip-button"
|
|
66
|
-
role="link"
|
|
67
|
-
title="https://turnipxenon.itch.io/pengi"
|
|
68
|
-
on:click={()=> window.open("https://turnipxenon.itch.io/pengi")}>
|
|
69
|
-
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
70
|
-
</button>
|
|
71
|
-
</section>
|
|
72
|
-
</section>
|
|
73
|
-
</section>
|
|
74
|
-
</Card>
|
|
75
|
-
|
|
76
|
-
<Card>
|
|
77
|
-
<section class="game-card" slot="content">
|
|
78
|
-
<!-- todo: move the image crop a bit lower -->
|
|
79
|
-
<video playsinline autoplay muted loop preload="none" id="hepcat-video">
|
|
80
|
-
<source src={HeaderHepCat} type="video/mp4">
|
|
81
|
-
</video>
|
|
82
|
-
|
|
83
|
-
<section class="game-card-body">
|
|
84
|
-
|
|
85
|
-
<h1>Hepcat</h1>
|
|
86
|
-
|
|
87
|
-
<blockquote>
|
|
88
|
-
"Cats, Jazz, and a little bit of Death. What more could anyone ask for?"
|
|
89
|
-
</blockquote>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
<p>This is a course project made by a team of six for <a
|
|
93
|
-
href="https://sites.google.com/ualberta.ca/cmput250/">CMPUT 250</a>, and it won <a
|
|
94
|
-
href="https://webdocs.cs.ualberta.ca/~nathanst/certificate/">Game of the year.</a>
|
|
95
|
-
</p>
|
|
96
|
-
|
|
97
|
-
<p>
|
|
98
|
-
Hep Cat is a rhythm game made in <a
|
|
99
|
-
href="https://www.rpgmakerweb.com/products/programs/rpg-maker-mv" target="_blank" class="qt-rpgmaker">
|
|
100
|
-
RPG Maker MV</a> with the help of additional custom-made <span class="qt-js">Javascript</span> plugins. I
|
|
101
|
-
wrote the rhythm game plugin's framework. For this plugin to work, I
|
|
102
|
-
had to write a <span class="qt-python">Python</span> script that parses osu! files into readable JSON
|
|
103
|
-
files.
|
|
104
|
-
</p>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<section class="game-link-section">
|
|
108
|
-
<button type="button" class="game-button turnip-button"
|
|
109
|
-
role="link"
|
|
110
|
-
title="https://bitbucket.org/egginchicken/hep-cat/src/master/"
|
|
111
|
-
on:click={()=> window.open("https://bitbucket.org/egginchicken/hep-cat/src/master/")}>
|
|
112
|
-
<img alt="bitbucket icon" src={BitbucketIcon}>
|
|
113
|
-
</button>
|
|
114
|
-
<button type="button" class="game-button turnip-button"
|
|
115
|
-
role="link"
|
|
116
|
-
title="https://just-a-phantom.itch.io/hep-cat"
|
|
117
|
-
on:click={()=> window.open("https://just-a-phantom.itch.io/hep-cat")}>
|
|
118
|
-
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
119
|
-
</button>
|
|
120
|
-
</section>
|
|
121
|
-
</section>
|
|
122
|
-
</section>
|
|
123
|
-
</Card>
|
|
124
|
-
|
|
125
|
-
<Card>
|
|
126
|
-
<section class="game-card" slot="content">
|
|
127
|
-
<img src={HeaderChefWings} alt="todo" loading="lazy">
|
|
128
|
-
<section class="game-card-body">
|
|
129
|
-
|
|
130
|
-
<h1>Chef Wings</h1>
|
|
131
|
-
<p>
|
|
132
|
-
A “roguelite-lite” where you gather ingredients in a procedurally-generated dungeon and use
|
|
133
|
-
them to cook for customers and then critics!
|
|
134
|
-
</p>
|
|
135
|
-
<p>
|
|
136
|
-
I built and documented several of the game’s systems including the game state management
|
|
137
|
-
system that extends <span class="qt-unity">Unity’s</span> existing Monobehavior lifecycle with new events,
|
|
138
|
-
and the dialogue, event, and level systems that coordinate the game flow using the interactive
|
|
139
|
-
dialogue tool YarnSpinner
|
|
140
|
-
</p>
|
|
141
|
-
|
|
142
|
-
<section class="game-link-section">
|
|
143
|
-
<button type="button" class="game-button turnip-button"
|
|
144
|
-
title="https://selk.io/birb-project/trunk/"
|
|
145
|
-
on:click={()=>modalStore.trigger(chefWingsWarning)}>
|
|
146
|
-
<img alt="itch.io icon" src={LinkIcon}>
|
|
147
|
-
<span>selk.io/birb-project/trunk/</span>
|
|
148
|
-
</button>
|
|
149
|
-
</section>
|
|
150
|
-
</section>
|
|
151
|
-
</section>
|
|
152
|
-
</Card>
|
|
153
|
-
<Card>
|
|
154
|
-
<section class="game-card" slot="content">
|
|
155
|
-
<video playsinline autoplay muted loop preload="none">
|
|
156
|
-
<source src={HeaderSoulwork} type="video/mp4">
|
|
157
|
-
</video>
|
|
158
|
-
<section class="game-card-body">
|
|
159
|
-
|
|
160
|
-
<h1>Soulwork</h1>
|
|
161
|
-
|
|
162
|
-
<p>
|
|
163
|
-
Soulwork is a 2D platforming game that uses unique physics to solve puzzle-based levels.
|
|
164
|
-
This project is a Time to Game Jam entry, restricting game development to be under 48
|
|
165
|
-
hours.
|
|
166
|
-
</p>
|
|
167
|
-
<p>
|
|
168
|
-
I helped make the level designing tools used by the designers to drag-and-drop objects
|
|
169
|
-
on the stage. I also helped program the unique physics-based gameplay mechanic. This was
|
|
170
|
-
was made in <span class="qt-unity">Unity</span> written using <span class="qt-cs">C#</span>.
|
|
171
|
-
</p>
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
<section class="game-link-section">
|
|
175
|
-
<button type="button" class="game-button turnip-button"
|
|
176
|
-
role="link"
|
|
177
|
-
title="https://github.com/Zeyu-Li/Clockwork"
|
|
178
|
-
on:click={()=> window.open("https://github.com/Zeyu-Li/Clockwork")}>
|
|
179
|
-
<img alt="github icon" src={GithubIcon}>
|
|
180
|
-
</button>
|
|
181
|
-
<button type="button" class="game-button turnip-button"
|
|
182
|
-
role="link"
|
|
183
|
-
title="https://itch.io/jam/time-to-game-jam-gadec-fall-game-jam/rate/514331"
|
|
184
|
-
on:click={()=> window.open("https://itch.io/jam/time-to-game-jam-gadec-fall-game-jam/rate/514331")}>
|
|
185
|
-
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
186
|
-
</button>
|
|
187
|
-
</section>
|
|
188
|
-
</section>
|
|
189
|
-
</section>
|
|
190
|
-
</Card>
|
|
191
|
-
<Card overrideStyle="align-self: flex-start;">
|
|
192
|
-
<section class="game-card itch-promo" slot="content">
|
|
193
|
-
<h1 class="mb-12 text-center">Check out my itch.io page for more games</h1>
|
|
194
|
-
|
|
195
|
-
<section class="game-link-section">
|
|
196
|
-
<button type="button" class="btn variant-filled-primary turnip-button"
|
|
197
|
-
role="link"
|
|
198
|
-
title="https://turnipxenon.itch.io/"
|
|
199
|
-
on:click={() => window.open("https://turnipxenon.itch.io/")}>
|
|
200
|
-
<img src={ItchLogoHotLink} class="long-btn-image" alt="itch icon">
|
|
201
|
-
<span>TurnipXenon</span>
|
|
202
|
-
</button>
|
|
203
|
-
</section>
|
|
204
|
-
|
|
205
|
-
</section>
|
|
206
|
-
</Card>
|
|
207
|
-
</section>
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<Card>
|
|
27
|
+
<div class="section-card title-card" slot="content">
|
|
28
|
+
<h1 class="text-center">Games</h1>
|
|
29
|
+
</div>
|
|
30
|
+
</Card>
|
|
31
|
+
|
|
32
|
+
<section class="games-section">
|
|
33
|
+
|
|
34
|
+
<Card>
|
|
35
|
+
<section class="game-card" slot="content">
|
|
36
|
+
<video playsinline autoplay muted loop preload="none">
|
|
37
|
+
video unavailable. original video contains pengi gameplay showing the dynamic dialog
|
|
38
|
+
layout and character animation.
|
|
39
|
+
<source src={HeaderPengi} type="video/mp4">
|
|
40
|
+
</video>
|
|
41
|
+
|
|
42
|
+
<section class="game-card-body">
|
|
43
|
+
|
|
44
|
+
<h1>Pengi</h1>
|
|
45
|
+
|
|
46
|
+
<blockquote>
|
|
47
|
+
Well well, quite the dreamer, aren’t you? Might be hard to get in... costs a lot of
|
|
48
|
+
money...
|
|
49
|
+
</blockquote>
|
|
50
|
+
|
|
51
|
+
<p>
|
|
52
|
+
Pengi is a text-based adventure made in <span class="qt-unity">Unity</span>. I acted as the sole
|
|
53
|
+
programmer for the team. Most of the work revolves around UI and creating <a
|
|
54
|
+
href="https://yarnspinner.dev/" target="_blank">YarnSpinner</a> commands for writers
|
|
55
|
+
to use to create expressive stage directions in the script.
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
<section class="game-link-section">
|
|
59
|
+
<button type="button" class="game-button turnip-button"
|
|
60
|
+
role="link"
|
|
61
|
+
title="https://github.com/GreenTea-M/ProjectPengi"
|
|
62
|
+
on:click={()=> window.open("https://github.com/GreenTea-M/ProjectPengi")}>
|
|
63
|
+
<img alt="github icon" src={GithubIcon}>
|
|
64
|
+
</button>
|
|
65
|
+
<button type="button" class="game-button turnip-button"
|
|
66
|
+
role="link"
|
|
67
|
+
title="https://turnipxenon.itch.io/pengi"
|
|
68
|
+
on:click={()=> window.open("https://turnipxenon.itch.io/pengi")}>
|
|
69
|
+
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
70
|
+
</button>
|
|
71
|
+
</section>
|
|
72
|
+
</section>
|
|
73
|
+
</section>
|
|
74
|
+
</Card>
|
|
75
|
+
|
|
76
|
+
<Card>
|
|
77
|
+
<section class="game-card" slot="content">
|
|
78
|
+
<!-- todo: move the image crop a bit lower -->
|
|
79
|
+
<video playsinline autoplay muted loop preload="none" id="hepcat-video">
|
|
80
|
+
<source src={HeaderHepCat} type="video/mp4">
|
|
81
|
+
</video>
|
|
82
|
+
|
|
83
|
+
<section class="game-card-body">
|
|
84
|
+
|
|
85
|
+
<h1>Hepcat</h1>
|
|
86
|
+
|
|
87
|
+
<blockquote>
|
|
88
|
+
"Cats, Jazz, and a little bit of Death. What more could anyone ask for?"
|
|
89
|
+
</blockquote>
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
<p>This is a course project made by a team of six for <a
|
|
93
|
+
href="https://sites.google.com/ualberta.ca/cmput250/">CMPUT 250</a>, and it won <a
|
|
94
|
+
href="https://webdocs.cs.ualberta.ca/~nathanst/certificate/">Game of the year.</a>
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<p>
|
|
98
|
+
Hep Cat is a rhythm game made in <a
|
|
99
|
+
href="https://www.rpgmakerweb.com/products/programs/rpg-maker-mv" target="_blank" class="qt-rpgmaker">
|
|
100
|
+
RPG Maker MV</a> with the help of additional custom-made <span class="qt-js">Javascript</span> plugins. I
|
|
101
|
+
wrote the rhythm game plugin's framework. For this plugin to work, I
|
|
102
|
+
had to write a <span class="qt-python">Python</span> script that parses osu! files into readable JSON
|
|
103
|
+
files.
|
|
104
|
+
</p>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
<section class="game-link-section">
|
|
108
|
+
<button type="button" class="game-button turnip-button"
|
|
109
|
+
role="link"
|
|
110
|
+
title="https://bitbucket.org/egginchicken/hep-cat/src/master/"
|
|
111
|
+
on:click={()=> window.open("https://bitbucket.org/egginchicken/hep-cat/src/master/")}>
|
|
112
|
+
<img alt="bitbucket icon" src={BitbucketIcon}>
|
|
113
|
+
</button>
|
|
114
|
+
<button type="button" class="game-button turnip-button"
|
|
115
|
+
role="link"
|
|
116
|
+
title="https://just-a-phantom.itch.io/hep-cat"
|
|
117
|
+
on:click={()=> window.open("https://just-a-phantom.itch.io/hep-cat")}>
|
|
118
|
+
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
119
|
+
</button>
|
|
120
|
+
</section>
|
|
121
|
+
</section>
|
|
122
|
+
</section>
|
|
123
|
+
</Card>
|
|
124
|
+
|
|
125
|
+
<Card>
|
|
126
|
+
<section class="game-card" slot="content">
|
|
127
|
+
<img src={HeaderChefWings} alt="todo" loading="lazy">
|
|
128
|
+
<section class="game-card-body">
|
|
129
|
+
|
|
130
|
+
<h1>Chef Wings</h1>
|
|
131
|
+
<p>
|
|
132
|
+
A “roguelite-lite” where you gather ingredients in a procedurally-generated dungeon and use
|
|
133
|
+
them to cook for customers and then critics!
|
|
134
|
+
</p>
|
|
135
|
+
<p>
|
|
136
|
+
I built and documented several of the game’s systems including the game state management
|
|
137
|
+
system that extends <span class="qt-unity">Unity’s</span> existing Monobehavior lifecycle with new events,
|
|
138
|
+
and the dialogue, event, and level systems that coordinate the game flow using the interactive
|
|
139
|
+
dialogue tool YarnSpinner
|
|
140
|
+
</p>
|
|
141
|
+
|
|
142
|
+
<section class="game-link-section">
|
|
143
|
+
<button type="button" class="game-button turnip-button"
|
|
144
|
+
title="https://selk.io/birb-project/trunk/"
|
|
145
|
+
on:click={()=>modalStore.trigger(chefWingsWarning)}>
|
|
146
|
+
<img alt="itch.io icon" src={LinkIcon}>
|
|
147
|
+
<span>selk.io/birb-project/trunk/</span>
|
|
148
|
+
</button>
|
|
149
|
+
</section>
|
|
150
|
+
</section>
|
|
151
|
+
</section>
|
|
152
|
+
</Card>
|
|
153
|
+
<Card>
|
|
154
|
+
<section class="game-card" slot="content">
|
|
155
|
+
<video playsinline autoplay muted loop preload="none">
|
|
156
|
+
<source src={HeaderSoulwork} type="video/mp4">
|
|
157
|
+
</video>
|
|
158
|
+
<section class="game-card-body">
|
|
159
|
+
|
|
160
|
+
<h1>Soulwork</h1>
|
|
161
|
+
|
|
162
|
+
<p>
|
|
163
|
+
Soulwork is a 2D platforming game that uses unique physics to solve puzzle-based levels.
|
|
164
|
+
This project is a Time to Game Jam entry, restricting game development to be under 48
|
|
165
|
+
hours.
|
|
166
|
+
</p>
|
|
167
|
+
<p>
|
|
168
|
+
I helped make the level designing tools used by the designers to drag-and-drop objects
|
|
169
|
+
on the stage. I also helped program the unique physics-based gameplay mechanic. This was
|
|
170
|
+
was made in <span class="qt-unity">Unity</span> written using <span class="qt-cs">C#</span>.
|
|
171
|
+
</p>
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
<section class="game-link-section">
|
|
175
|
+
<button type="button" class="game-button turnip-button"
|
|
176
|
+
role="link"
|
|
177
|
+
title="https://github.com/Zeyu-Li/Clockwork"
|
|
178
|
+
on:click={()=> window.open("https://github.com/Zeyu-Li/Clockwork")}>
|
|
179
|
+
<img alt="github icon" src={GithubIcon}>
|
|
180
|
+
</button>
|
|
181
|
+
<button type="button" class="game-button turnip-button"
|
|
182
|
+
role="link"
|
|
183
|
+
title="https://itch.io/jam/time-to-game-jam-gadec-fall-game-jam/rate/514331"
|
|
184
|
+
on:click={()=> window.open("https://itch.io/jam/time-to-game-jam-gadec-fall-game-jam/rate/514331")}>
|
|
185
|
+
<img alt="itch.io icon" src={ItchLogoHotLink}>
|
|
186
|
+
</button>
|
|
187
|
+
</section>
|
|
188
|
+
</section>
|
|
189
|
+
</section>
|
|
190
|
+
</Card>
|
|
191
|
+
<Card overrideStyle="align-self: flex-start;">
|
|
192
|
+
<section class="game-card itch-promo" slot="content">
|
|
193
|
+
<h1 class="mb-12 text-center">Check out my itch.io page for more games</h1>
|
|
194
|
+
|
|
195
|
+
<section class="game-link-section">
|
|
196
|
+
<button type="button" class="btn variant-filled-primary turnip-button"
|
|
197
|
+
role="link"
|
|
198
|
+
title="https://turnipxenon.itch.io/"
|
|
199
|
+
on:click={() => window.open("https://turnipxenon.itch.io/")}>
|
|
200
|
+
<img src={ItchLogoHotLink} class="long-btn-image" alt="itch icon">
|
|
201
|
+
<span>TurnipXenon</span>
|
|
202
|
+
</button>
|
|
203
|
+
</section>
|
|
204
|
+
|
|
205
|
+
</section>
|
|
206
|
+
</Card>
|
|
207
|
+
</section>
|