feat: ✨ add viktor data and content
This commit is contained in:
parent
4eb6fe0e3a
commit
02e5208be7
8 changed files with 224 additions and 0 deletions
BIN
src/img/viktor/avatar.png
Normal file
BIN
src/img/viktor/avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
BIN
src/img/viktor/pinup-SFW.png
Normal file
BIN
src/img/viktor/pinup-SFW.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 MiB |
BIN
src/img/viktor/ref-SFW.png
Normal file
BIN
src/img/viktor/ref-SFW.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
36
src/viktor/anatomy.md
Normal file
36
src/viktor/anatomy.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
eleventyNavigation:
|
||||
key: Anatomy
|
||||
order: 2
|
||||
refs:
|
||||
viktorRef:
|
||||
src: src/img/viktor/ref-SFW.png
|
||||
alt: Viktor Ref
|
||||
artist: sabertoofs
|
||||
href: https://bsky.app/profile/sabertoofs.bsky.social
|
||||
viktorPinup:
|
||||
src: src/img/viktor/pinup-SFW.png
|
||||
alt: Viktor Ref
|
||||
artist: sabertoofs
|
||||
href: https://bsky.app/profile/sabertoofs.bsky.social
|
||||
---
|
||||
|
||||
<ref-img :src="refs.viktorRef.src" :alt="refs.viktorRef.alt" :artist="refs.viktorRef.artist" :href="refs.viktorRef.href" :dropshadow="true" webc:nokeep></ref-img>
|
||||
|
||||
<colors :colors="getColors()" webc:nokeep></colors>
|
||||
|
||||
Viktor is a bipedal plantigrade Ankylosaurus. His skin is mostly bicolored, with several shades of brown.
|
||||
|
||||
His forehead, nose, chest, belly and crotch are of light desert sand colors that run through the underside of his tail.
|
||||
|
||||
His cheeks, shoulders, back and thighs, in contrast, stand out with a rich walnut brown, which is also found on the sides of his tail. From the back of his head, down his spine and across the top of his tail is a continuous strip of deep dark cedar brown. Arms and legs are distinguished by a light earthy brown.
|
||||
|
||||
<ref-img :src="refs.viktorPinup.src" :alt="refs.viktorPinup.alt" :artist="refs.viktorPinup.artist" :href="refs.viktorPinup.href" :dropshadow="true" webc:nokeep></ref-img>
|
||||
|
||||
His entire body is speckled with scattered aquamarine spots, which come in pairs of one large and one small spot. The only exceptions are the spots on his cheeks and behind his lower cheek horns, which come in threes and his the top side of his snout, which sports a big single spot. Mouth, tongue, nostrils and any other tissue of his body also feature this color.
|
||||
|
||||
His eyes shine with a mixture of light sea green and electric blue.
|
||||
|
||||
Horns and claws are of a typical bone white. Starting with the double pair of horns on his head, a parallel line of horns continues down his back, with additional horns adorning his shoulders and thighs. His tail is also armed with horns on both sides along its entire length. At the tip of the tail is a club-like ossification that he can use for fending off foes.
|
||||
|
||||
He owes his strong, stocky physique to years of hard physical labor.
|
10
src/viktor/career.md
Normal file
10
src/viktor/career.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
eleventyNavigation:
|
||||
key: Career
|
||||
order: 3
|
||||
---
|
||||
|
||||
Viktor's had many different jobs in the past, some of which where very formative, other's just
|
||||
paid the bills.
|
||||
|
||||
<timeline :@jobs="jobs" webc:nokeep></timeline>
|
23
src/viktor/index.md
Normal file
23
src/viktor/index.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
eleventyNavigation:
|
||||
key: About
|
||||
order: 1
|
||||
---
|
||||
|
||||
Viktor is not a man of many words. His manner of expression is simple and direct, sometimes to the point that it becomes a little blunt. His brash manner doesn't go down well with everyone and regularly gets him into trouble.
|
||||
|
||||
At the same time, this is also an expression of his exuberant self-confidence. He won't take any crap from anyone and doesn't hesitate to give someone a piece of his mind.
|
||||
|
||||
All this may make him look like a really unpleasant fellow, but he greatly appreciates the company of people he trusts. He is very selective about whom he counts among this group of people, though. He enjoys some face time with buddies, preferably over a few beers at his favorite bar.
|
||||
|
||||
Viktor prefers to keep it simple. He's not particularly fond of the dependence on tech these days and how everything shifts into online spaces. His 10 year old phone is on silent most of the time.
|
||||
|
||||
## Sexuality
|
||||
|
||||
<traits :traits="getSexTraits()" webc:nokeep></traits>
|
||||
|
||||
As a teenager, Viktor noticed that he felt a bit differently about the boys in his class. Especially in gym class, his eyes tended to linger longer on his classmates as they rough-housed in the locker room, as pubescent boys do. However, he could never quite come to terms with the idea that he might be a little different from his friends, who were all beginning to take an interest in girls, unlike him, who was more interested in his buddies.
|
||||
|
||||
As he got older, he slowly learned to come to terms with the fact that he saw more in his buddies than just friends. However, he still kept a low profile.
|
||||
|
||||
Until one evening at a party, when one of his friends complained that he wouldn't get any from his girlfriend. Both of them were already well intoxicated and Viktor made him the slurred proposal that he would help him out as his bro. At first his buddy was irritated by the offer, but eventually agreed. The two snuck into a bedroom at the host's place, where Viktor would let his buddy unload all the pent-up pressure inside him. He wouldn't remember much of the party, but what he didn't forget how good it felt to give himself to another man.
|
152
src/viktor/viktor.11tydata.js
Normal file
152
src/viktor/viktor.11tydata.js
Normal file
|
@ -0,0 +1,152 @@
|
|||
const firstName = 'Viktor',
|
||||
lastName = 'Kraastav',
|
||||
species = 'Ankylosaurus',
|
||||
dateOfBirth = new Date('1987-12-08'),
|
||||
gender = 'male',
|
||||
pronouns = 'he/him',
|
||||
orientation = 'gay',
|
||||
role = 'bottom',
|
||||
height = 227, // cm
|
||||
weight = 175, // kg
|
||||
color = {
|
||||
front: '#e7c7b1',
|
||||
limbs: '#493428',
|
||||
back: '#422322',
|
||||
spine: '#341c1c',
|
||||
tissue: '#6bb9db',
|
||||
spikes: '#f8ebdd',
|
||||
eyesPrimary: '#a7eef1',
|
||||
eyesSecondary: '#6dabd1'
|
||||
},
|
||||
description = '',
|
||||
jobs = [
|
||||
{
|
||||
title: 'Bartender',
|
||||
icon: 'whiskey',
|
||||
desc: "Viktor's professional career began as a bartender at a pub in his hometown. There he often doubled as a bouncer when a few guests got too drunk and started making a fuss. A defining moment of that job was when someone climbed over the counter and threatened him with a broken bottle. Wrestled to the ground and with a broken bottle in front of his face, he had to make a split-second decision. With a powerful swing of his tail bone, he knocked the attacker down. This experience taught him the importance of effectively defending himself against unpleasant fellows and to eliminate threats before they get close to him ever again."
|
||||
},
|
||||
{
|
||||
title: 'Lumberjack',
|
||||
icon: 'tree',
|
||||
desc: 'After leaving his hometown, Viktor started working as a lumberjack. The club at the end of his tail came very much in handy as a counterweight for each swing of his axe, allowing him to strike efficiently and powerfully, felling even the largest trees with relative ease. His naturally tough scales protected him from splinters from the felled wood. The long-lasting hard physical work toughened his body over the years. Before taking the cut logs to the sawmill, Viktor always took a break to rest in the peace and quiet of the forest. Although he enjoyed the seclusion of the country life for a while, he was longing for the sociability of city life again.'
|
||||
},
|
||||
{
|
||||
title: 'Car Mechanic',
|
||||
icon: 'car',
|
||||
desc: 'Moving into a suburban town, Viktor applied at an auto repair shop, where he learned the ins and outs of fixing cars. He became really good at it and enjoyed breathing new mechanical life into broken down vehicles. However, as time went on, the repair shop faced financial troubles, as it became increasingly difficult to come by spare parts as auto makers would only deal them to certified repair partners and certifications were prohibitively expensive. Viktor had to watch business slowly deteriorate, as skilled coworkers kept getting laid off, until the repair shop closed down for good.'
|
||||
},
|
||||
{
|
||||
title: 'Construction Worker',
|
||||
icon: 'helmet-safety',
|
||||
desc: 'Having taken a liking in physically demanding work, Viktor took on a job as a construction worker. Hard hat perched atop his head and belt tool slung around his waist, he was always ready to lend a hand (or tail if walls or boulders needed a good teardown). Since he had more than enough strength training from his previous jobs, he was often assigned carrying jobs to clear the site and haul building materials. After work was done, Viktor enjoyed the company of his colleagues over an after-work beer until late in the evenings. On one of these evenings, he got a little reckless with a colleague under the veil of the night and both were caught in the act of fooling around with each other on the construction site. In the following weeks, the colleagues kept their distance from Viktor and the evenings together also dissolved very quickly when he joined them. The continued ostracization ultimately prompted him to look for something new.'
|
||||
},
|
||||
{
|
||||
title: 'Welder',
|
||||
icon: 'industry',
|
||||
desc: 'In his job as a welder, Viktor spent his days working shifts in a workshop. In addition to special tools and plasma welders, he also used his powerful tail club to hammer metal parts into shape. He acquired a wide variety of welding techniques to join or repair metal structures. He worked with a wide variety of alloys such as steel, aluminum and titanium. Viktor showed extreme skill in his work with great precision and attention to detail. However, this dedication was a thorn in the side of a jealous colleague who saw Viktor as a rival and schemed against him, sabotaging his work, which ultimately ended in his termination after a customer sued the welding shop for botching the job. Viktor never found out who the culprit was, and the loss of that job still hangs over him.'
|
||||
},
|
||||
{
|
||||
title: 'Delivery Driver',
|
||||
icon: 'truck',
|
||||
desc: "When Viktor was strapped for cash, he took on a job in the gig economy as a driver delivering packages for a large online delivery service. His previous physically demanding jobs allowed him to haul even bulky deliveries to their destination with relative ease. If the shipping center managers hadn't been breathing down his neck constantly, he might have held this job even longer. But after one of the managers tried to show him up in front of the whole team, he snapped and broke their leg with his tail club. Of course, he didn't have to report for duty the next day."
|
||||
},
|
||||
{
|
||||
title: 'Docks Werehouse Worker',
|
||||
icon: 'boxes-stacked',
|
||||
desc: "Currently Viktor works at the docks in the port town he moved to. His main responsibilities include loading and unloading cargo from ships and transporting it to and from warehousing. The hustle and bustle of the port sometimes gets on his nerves. Especially when the crew of docking ships come ashore again after a long time and make it clear that they don't have much contact with \"landlubbers\". Viktor doesn't get particularly impressed by this and foul mouths them right back if he gets the impression they're looking for trouble."
|
||||
}
|
||||
];
|
||||
|
||||
const getClientLocale = () => {
|
||||
return navigator.languages.length > 0 ? navigator.languages[0] : 'en-US';
|
||||
};
|
||||
|
||||
const getAge = (dateOfBirth) => {
|
||||
const today = new Date();
|
||||
|
||||
const thisYear = today.getFullYear();
|
||||
const thisMonth = today.getMonth();
|
||||
const thisDay = today.getDate();
|
||||
|
||||
const dobYear = dateOfBirth.getFullYear();
|
||||
const dobMonth = dateOfBirth.getMonth();
|
||||
const dobDay = dateOfBirth.getDate();
|
||||
|
||||
let age = thisYear - dobYear;
|
||||
|
||||
if (thisMonth < dobMonth) age--;
|
||||
if (thisMonth === dobMonth && thisDay < dobDay) age--;
|
||||
|
||||
return age;
|
||||
};
|
||||
|
||||
const toImperial = (cm) => {
|
||||
const realFeet = (cm * 0.3937) / 12;
|
||||
const feet = Math.floor(realFeet);
|
||||
const inches = Math.round((realFeet - feet) * 12);
|
||||
|
||||
return `${feet}'${inches}"`;
|
||||
};
|
||||
|
||||
const toInch = (cm) => {
|
||||
return `${Math.round(cm / 2.45)} in`;
|
||||
};
|
||||
|
||||
const toLbs = (kg) => {
|
||||
const nearExact = kg / 0.45359237;
|
||||
const lbs = Math.floor(nearExact);
|
||||
|
||||
return lbs;
|
||||
};
|
||||
|
||||
const toFahrenheit = (celsius) => {
|
||||
return celsius * 1.8 + 32;
|
||||
};
|
||||
|
||||
const dateFormat = new Intl.DateTimeFormat(getClientLocale(), {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: '2-digit'
|
||||
});
|
||||
|
||||
const getFullName = () => `${firstName} ${lastName}`;
|
||||
const getDateOfBirth = () => `${dateFormat.format(dateOfBirth)} (${getAge(dateOfBirth)})`;
|
||||
const getHeight = () => `${height} cm (${toImperial(height)})`;
|
||||
const getWeight = () => `${weight} kg (${toLbs(weight)} lbs)`;
|
||||
|
||||
const getTraits = () => [
|
||||
{ icon: 'cake-candles', type: 'Date of Birth', text: getDateOfBirth() },
|
||||
{ icon: 'mars', type: 'Sex/Gender', text: gender },
|
||||
{ icon: 'ruler', type: 'Height', text: getHeight() },
|
||||
{ icon: 'weight-hanging', type: 'Weight', text: getWeight() }
|
||||
];
|
||||
|
||||
const getSexTraits = () => [
|
||||
{ icon: 'heart', type: 'Orientation', text: orientation },
|
||||
{ icon: 'arrows-up-down', type: 'Role', text: role }
|
||||
];
|
||||
|
||||
const getColors = () => [
|
||||
{ name: 'Front', value: color.front },
|
||||
{ name: 'Arms, legs', value: color.limbs },
|
||||
{ name: 'Back Main', value: color.back },
|
||||
{ name: 'Back Spine', value: color.spine },
|
||||
{ name: 'Highlight scales, tissue', value: color.tissue },
|
||||
{ name: 'Spikes, tail club', value: color.spikes },
|
||||
{ name: 'Eyes primary', value: color.eyesPrimary },
|
||||
{ name: 'Eyes secondary', value: color.eyesSecondary }
|
||||
];
|
||||
|
||||
export default {
|
||||
firstName,
|
||||
species,
|
||||
gender,
|
||||
pronouns,
|
||||
orientation,
|
||||
role,
|
||||
jobs,
|
||||
getFullName,
|
||||
getTraits,
|
||||
getSexTraits,
|
||||
getColors
|
||||
};
|
3
src/viktor/viktor.11tydata.json
Normal file
3
src/viktor/viktor.11tydata.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"layout": "character.webc"
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue