Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions content/blog/2024-05-04_dotrix-update.md
Original file line number Diff line number Diff line change
@@ -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
---
34 changes: 34 additions & 0 deletions content/blog/2024-12-14_gamedev-events.md
Original file line number Diff line number Diff line change
@@ -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!
52 changes: 52 additions & 0 deletions content/blog/2024-12-23_medieval-research.md
Original file line number Diff line number Diff line change
@@ -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**
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-14_GDS.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-23_abandoned-house.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-23_fortifications.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-23_medieval-house-toys.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-23_medieval-town.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/blog/2024-12-23_wine-press-and-wheel.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions src/components/blog/blog-card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ interface BlogCardProps {
}

export const BlogCard: React.FC<BlogCardProps> = ({className, post, url}) => {
const image = post.preview || post.image;
return (
<Card className={classNames("shadow-sm bg-grey-300", className)}>
<article className="flex flex-col flex-grow">
{post.image && (
{image && (
<a href={url}>
<Image
src={`//${site.blog.slug}/${post.image}`}
src={`//${site.blog.slug}/${image}`}
alt={""}
width={1280}
height={720}
Expand Down
6 changes: 3 additions & 3 deletions src/layout/blog-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ export const BlogLayout: React.FC<BlogLayoutProps> = ({
)}

<BlogPosts posts={posts} className="w-full min-h-min" />
<Paginator
{root?.url && (<Paginator
className="h-144"
page={page}
totalPages={totalPages}
root={tag ? `${root.url}/${tag}` : root.url!}
/>
root={tag ? `${root.url}/${tag}` : root.url}
/>)}
</PageLayout>
);
};
13 changes: 10 additions & 3 deletions src/layout/blog-post-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const BlogPostLayout: React.FC<BlogPostLayoutProps> = ({
{formatDate(post.meta.date)} by <span className="font-bold">{post.meta.author}</span>
</span>
)}
{tags.length > 0 && (
{!!tags.length && root?.url && (
<div className="flex space-x-8 font-bold">
{tags.map(
tag => (
Expand All @@ -53,6 +53,13 @@ export const BlogPostLayout: React.FC<BlogPostLayoutProps> = ({
</div>
)}
</div>
{post.meta.youtube && (
<div className="mb-24 relative overflow-hidden w-full pt-[56.25%]">
<iframe className="absolute top-0 bottom-0 left-0 right-0 w-full h-full"
src={`https://www.youtube.com/embed/${post.meta.youtube}`}>
</iframe>
</div>
)}
{post.meta.image && (
<div className="mb-24">
<Image
Expand All @@ -65,10 +72,10 @@ export const BlogPostLayout: React.FC<BlogPostLayoutProps> = ({
</div>
)}
<Markdown className="text-black-gray text-sm" content={post.content}></Markdown>
<LeafOver className="my-32"
{root?.url && (<LeafOver className="my-32"
prev={prev && ({url: `${root.url}/${prev.slug}`, title: prev.title})}
next={next && ({url: `${root.url}/${next.slug}`, title: next.title})}
/>
/>)}
{post.meta.comments && (
<section className="border-t-8 border-grey">
<BlogComments />
Expand Down
12 changes: 9 additions & 3 deletions src/modules/blog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand All @@ -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,
Expand Down Expand Up @@ -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,
});
2 changes: 1 addition & 1 deletion src/modules/content-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
4 changes: 2 additions & 2 deletions src/pages/dotrix.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ const Product: NextPage<PageProps<DotrixPageProps>> = ({menu, social, data}) =>
<div className="mx-auto max-w-screen-lg">
<Markdown className="text-md" content={faq} />
</div>
<PageAction action="dotrix.rs" link="https://dotrix.rs/">
Find more on Dotrix website!
<PageAction action="GitHub" link="https://github.com/lowenware/dotrix">
Find more on GitHub!
</PageAction>
</PageLayout>
</>
Expand Down
Loading