diff --git a/content/blog/2024-05-04_dotrix-update.md b/content/blog/2024-05-04_dotrix-update.md new file mode 100644 index 00000000..24a3b4eb --- /dev/null +++ b/content/blog/2024-05-04_dotrix-update.md @@ -0,0 +1,11 @@ +--- +author: "Ilja K." +date: 2024-05-04T12:00:00+01:00 +image: null +preview: "2024-05-04_dotrix-status-update.webp" +youtube: "DHeVh4egFyo" +title: "Dotrix status update" +summary: "New video about Dotrix on our YouTube channel" +tags: ["dotrix", "youtube"] +comments: true +--- diff --git a/content/blog/2024-12-14_gamedev-events.md b/content/blog/2024-12-14_gamedev-events.md new file mode 100644 index 00000000..4064360f --- /dev/null +++ b/content/blog/2024-12-14_gamedev-events.md @@ -0,0 +1,34 @@ +--- +author: "Ilja K." +date: 2024-12-14T15:27:27+02:00 +image: "2024-12-14_GDS.jpg" +title: "GDS and GamesGround in 2024" +summary: "Inspiration from indie developers" +tags: ["events", "gamedev"] +comments: true +--- + +This year I have visited two nearby gamedev events. The +[GamesGround](https://www.gamesground.de/) took place in Berlin on 14-16 +of November and [GDS](https://www.gdsession.com) in Prague, which became +already a good yearly tradition to attend, on 14 of December. + +Last year it was mostly about workshops and meetings with speakers. Worth +mentioning at least Brian Fargo the creator of Fallout and Wasteland series, as +well as Rhianna Pratchett, the video game writer and the journalist. Both are +great story tellers and now also a great teachers for our team. + +This year it was mainly about meetings with indie developers and experience +exchange. I would like to thank the team of +[Sagittaras Games](https://sagittaras.com) for interesting discussion about +mechanics of their [Spellborn](https://sagittaras.com/games/spellborn) game. + +There are also two games from GDS worth your attention: +the [Argent Wilds](https://store.steampowered.com/app/2275010/Ardent_Wilds/) +which is very close to our game project in sense of mechanics and also the +[Robinson Crusoe](https://store.steampowered.com/app/3197100/Robinson_Crusoe/) +with great graphics and atmosphere. + +This time we also have some nice video materials from both events that will be +shared on our [YouTube channel](https://www.youtube.com/@lowenware) later. So +stay tuned! diff --git a/content/blog/2024-12-23_medieval-research.md b/content/blog/2024-12-23_medieval-research.md new file mode 100644 index 00000000..6f63d0ab --- /dev/null +++ b/content/blog/2024-12-23_medieval-research.md @@ -0,0 +1,52 @@ +--- +author: "Ilja K." +date: 2024-12-23T16:43:48+02:00 +image: "2024-12-23_medieval-house-toys.jpg" +title: "Medieval research" +summary: "Highlights from our trip to medieval city" +tags: ["gamedev", "3d"] +comments: true +--- + +Working on 3D assets for Dotrix and for our game project we've realized that we +need a better understanding on how buildings and various objects from medieval +history period should look like. So in the end of 2024 +we've performed a research trip to Nürnberg that brought us more than 2Gb of +photo materials as well as tons of joy and Christmas atmosphere. + +## Fortifications + +![Fortifications](/blog/2024-12-23_fortifications.jpg) + +By just looking at these towers and walls people barely ask themselves, why +it is this or that angle, what is wrong with these windows or why the +direction of stairs does matter. But there is an experience of war experts +collected by ages and paid with lives hidden in the structures and the +architectural decisions. The fortress was one of the most attractive +points for us, so we could reproduce it as a game experience. There is a +lot of work to be done in that direction. + +## Town houses + +![Medieval town](/blog/2024-12-23_medieval-town.jpg) + +In that aspect, Nürnberg is a real treasure. The Tanner's Lane and the +Handwerkerhof provided us with everything we wanted to see: walls armatured with +wooden beams, tiny wooden windows, roofs, cornices, gutters, cart wheels and +even more. One thing that should definitely appear in our game is the wine +press. + +![Medieval town](/blog/2024-12-23_wine-press-and-wheel.jpg) + +## What's cooking? + +Next year we plan to focus a lot more on the game project. A huge progress and +good news on terrain and world generator are on their way. + +Also here is some preview of an abandoned house model for a mystery location +in our game. + +![Abandoned house](/blog/2024-12-23_abandoned-house.jpg) + +We wish you a Merry Christmas and all the best in the New Year 2025! +**The Löwenware team** diff --git a/public/blog/2024-05-04_dotrix-status-update.webp b/public/blog/2024-05-04_dotrix-status-update.webp new file mode 100644 index 00000000..1fc27adf Binary files /dev/null and b/public/blog/2024-05-04_dotrix-status-update.webp differ diff --git a/public/blog/2024-12-14_GDS.jpg b/public/blog/2024-12-14_GDS.jpg new file mode 100644 index 00000000..39b02e47 Binary files /dev/null and b/public/blog/2024-12-14_GDS.jpg differ diff --git a/public/blog/2024-12-23_abandoned-house.jpg b/public/blog/2024-12-23_abandoned-house.jpg new file mode 100644 index 00000000..3654ade3 Binary files /dev/null and b/public/blog/2024-12-23_abandoned-house.jpg differ diff --git a/public/blog/2024-12-23_fortifications.jpg b/public/blog/2024-12-23_fortifications.jpg new file mode 100755 index 00000000..c532fec0 Binary files /dev/null and b/public/blog/2024-12-23_fortifications.jpg differ diff --git a/public/blog/2024-12-23_medieval-house-toys.jpg b/public/blog/2024-12-23_medieval-house-toys.jpg new file mode 100755 index 00000000..cbded788 Binary files /dev/null and b/public/blog/2024-12-23_medieval-house-toys.jpg differ diff --git a/public/blog/2024-12-23_medieval-town.jpg b/public/blog/2024-12-23_medieval-town.jpg new file mode 100644 index 00000000..167c093b Binary files /dev/null and b/public/blog/2024-12-23_medieval-town.jpg differ diff --git a/public/blog/2024-12-23_wine-press-and-wheel.jpg b/public/blog/2024-12-23_wine-press-and-wheel.jpg new file mode 100644 index 00000000..e542c12e Binary files /dev/null and b/public/blog/2024-12-23_wine-press-and-wheel.jpg differ diff --git a/src/components/blog/blog-card.tsx b/src/components/blog/blog-card.tsx index 2288b578..79b607fc 100644 --- a/src/components/blog/blog-card.tsx +++ b/src/components/blog/blog-card.tsx @@ -14,13 +14,14 @@ interface BlogCardProps { } export const BlogCard: React.FC = ({className, post, url}) => { + const image = post.preview || post.image; return (
- {post.image && ( + {image && ( {""} = ({ )} - + root={tag ? `${root.url}/${tag}` : root.url} + />)} ); }; diff --git a/src/layout/blog-post-layout.tsx b/src/layout/blog-post-layout.tsx index aab5d724..55279a87 100644 --- a/src/layout/blog-post-layout.tsx +++ b/src/layout/blog-post-layout.tsx @@ -41,7 +41,7 @@ export const BlogPostLayout: React.FC = ({ {formatDate(post.meta.date)} by {post.meta.author} )} - {tags.length > 0 && ( + {!!tags.length && root?.url && (
{tags.map( tag => ( @@ -53,6 +53,13 @@ export const BlogPostLayout: React.FC = ({
)} + {post.meta.youtube && ( +
+ +
+ )} {post.meta.image && (
= ({
)} - + />)} {post.meta.comments && (
diff --git a/src/modules/blog.ts b/src/modules/blog.ts index 807c965b..76a53812 100644 --- a/src/modules/blog.ts +++ b/src/modules/blog.ts @@ -11,7 +11,9 @@ export interface BlogPostMetaRaw extends StaticPageMeta { title: string, summary?: string, tags: string, + preview: string | null, image: string | null, + youtube: string | null, comments: boolean, author: string, } @@ -161,7 +163,7 @@ export class Blog { getBlogPostStaticProps(slug: string): BlogPostStaticProps { const {meta, content} = this.readBlogPost(`${slug}.md`); - const index = this.posts.findIndex(p => p.slug === slug)!; + const index = this.posts.findIndex(p => p.slug === slug); let prev = null, next = null; @@ -227,7 +229,7 @@ export class Blog { } }); - const {title, summary, date, tags, image, comments, author} = data; + const {title, summary, date, tags, image, comments, author, youtube, preview} = data; const slug = fileName.replace(this.extension, ""); return { @@ -238,10 +240,12 @@ export class Blog { summary, date, tags, + preview, image, url: path.join(this.meta.url, slug), menu: null, order: 0, + youtube, comments: comments === false ? false : true, }), content, @@ -277,9 +281,11 @@ export const mapBlogPostMetaToRaw = (meta: BlogPostMeta): BlogPostMetaRaw => ({ export const mapBlogPostRawToMeta = (raw: BlogPostMetaRaw): BlogPostMeta => ({ ...raw, - date: new Date(raw.date!), + date: new Date(`${raw.date}`), tags: raw.tags ? `${raw.tags}`.split(",").map(t => t.trim().toLowerCase()) : [], image: raw.image || null, + preview: raw.preview || null, + youtube: raw.youtube || null, }); diff --git a/src/modules/content-manager.ts b/src/modules/content-manager.ts index 078d1f33..245ead2c 100644 --- a/src/modules/content-manager.ts +++ b/src/modules/content-manager.ts @@ -61,7 +61,7 @@ export class ContentManager { private metaFields = ["title"]; static root(menu: StaticPageMeta[], slug: string) { - return menu.find(l => l.slug === slug)!; + return menu.find(l => l.slug === slug); }; constructor( diff --git a/src/pages/dotrix.tsx b/src/pages/dotrix.tsx index 66bd7429..d99401d3 100644 --- a/src/pages/dotrix.tsx +++ b/src/pages/dotrix.tsx @@ -71,8 +71,8 @@ const Product: NextPage> = ({menu, social, data}) =>
- - Find more on Dotrix website! + + Find more on GitHub!