Switch theme
BIN
content/post/butter-dejavu/butter-dragon-modelloading.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
content/post/butter-dejavu/butter-smiley-projected.png
Normal file
|
After Width: | Height: | Size: 410 B |
BIN
content/post/butter-dejavu/butter-smiley-streched.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
content/post/butter-dejavu/featured-image.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
118
content/post/butter-dejavu/index.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Getting Deja Vu Right Now"
|
||||
date: 2021-08-08T21:21:30-04:00
|
||||
lastmod: 2022-08-22T16:02:56-04:00
|
||||
draft: false
|
||||
|
||||
description: "I feel like I wrote this code before..."
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Butter Engine", "Update", "Programming"]
|
||||
categories: ["butterengine"]
|
||||
|
||||
lightgallery: false
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
Up until last week, I have been working on the base rendering, textures, and 3D projection which all felt vaguely familiar (*cough cough..[TF2 OpenGL & Java](https://github.com/joshuafhiggins/tf2-opengl)..cough cough*). As well as a basis for mod loading.
|
||||
|
||||
But for this week, I didn't do much (*less than I wanted to*) but I did do research into physics, cameras, model loading, and entity component systems/ECS.
|
||||
|
||||
## Base Rendering
|
||||
I'm really happy with the way this got done. The mesh class makes a bunch of BufferObjects that hold the OpenGL pointers and have base functions for cleanup. This allows very easy derivatives of the Mesh class for whatever they needed.
|
||||
|
||||
{{< highlight java >}}
|
||||
public class FooMesh extends Mesh {
|
||||
//...
|
||||
|
||||
@Override
|
||||
public void Create() {
|
||||
//Make our VAO
|
||||
VAO = new BufferObject.VAO();
|
||||
VAO.Bind();
|
||||
//Array of non specific BufferObjects
|
||||
bufferObjects[0] = new BufferObject.VBO(vertices, 0);
|
||||
//Static classes that inherit BufferObject.
|
||||
//These are binded and attached with no intervention
|
||||
bufferObjects[1] = new BufferObject.CBO(vertices, 1);
|
||||
bufferObjects[2] = new BufferObject.TBO(vertices, 2);
|
||||
IBO = new BufferObject.IBO(indices);
|
||||
VAO.Unbind();
|
||||
}
|
||||
|
||||
//...
|
||||
|
||||
//Rendering, method calls are pretty self explanatory.
|
||||
//Inputs aren't final.
|
||||
//I'm not happy with the Entity being passed in for rendering when Entity's hold meshes
|
||||
public void Render(Entity entity, Camera camera) {
|
||||
VAO.Bind();
|
||||
enableVertexAttrib();
|
||||
IBO.Bind();
|
||||
material.Bind();
|
||||
shader.Bind();
|
||||
SetUniforms(entity, camera);
|
||||
DrawElements();
|
||||
shader.Unbind();
|
||||
material.Unbind();
|
||||
IBO.Unbind();
|
||||
disableVertexAttrib();
|
||||
VAO.Unbind();
|
||||
}
|
||||
}
|
||||
{{< / highlight >}}
|
||||
|
||||
Derivatives were made when going through the tutorials but were ultimately removed for the approach of having a better base because having a different Mesh for color and then for texture and then color, but color is never used... It was just a headache for general refactoring and keeping them up to date. A lot of buffer stuff was taken from TF2 in Java & OpenGL.
|
||||
|
||||
## Textures
|
||||
Right now, only Albedo is being used and the Material class is nothing but a holder for SlickUtil Textures. I want the Material class to hold all of the textures without order and you leave it to modders to make their shaders and textures line up. I'm only using SlickUtil right now because of the ability to load Textures from class resources rather than the file path. But I'm ultimately going to replace it with my one Texture class because of the [model loader](#Model Loading) not using class resources. Supposedly we can load from resources, and call the function to load model from memory or textures from memory with STB, but I have no idea what the size of the buffers should be.
|
||||
|
||||

|
||||
|
||||
## 3D Projection
|
||||
JOML is being used for math and matrix loading and what not but this may change (see [the physics section](#physics)). Once I did this, it kinda made me think about what next. I thought I should focus on an ECS system for holding positions, rotations, etc. which right now is the Entity class that should be derived from but will change (see [the ECS section](#ecs)). This was kind of the thing that spun off into the unproductive week. Although this was not easy at all because the shader was originally going from different matrices in the wrong order.
|
||||
|
||||
{{< highlight glsl >}}
|
||||
//...
|
||||
|
||||
uniform mat4 model;
|
||||
uniform mat4 view;
|
||||
uniform mat4 projection;
|
||||
|
||||
void main() {
|
||||
//How it should be:
|
||||
//gl_Position = vec4(position, 1.0) * model * view * projection;
|
||||
|
||||
gl_Position = projection * view * model * vec4(position, 1.0);
|
||||
|
||||
//...
|
||||
}
|
||||
{{< / highlight >}}
|
||||
|
||||
But here it is now working just right:
|
||||
|
||||

|
||||
|
||||
## Mod Loading
|
||||
The Main class no longer holds any GLFW and is instead held in the Window class, similar to the Mesh class and BufferObjects. Mods right now hold a lot of control over what's happening. This is still subject to change because while this was going to be a render engine, it quickly became this bigger thing and the order of events right now is: Rendering (v0.1) -> ECS/Physics (v0.2) -> Audio/Sound (v0.3) -> Events/Mod Loading (v0.4). So we aren't even done with v0.1 and shouldn't worry about the specifics of this just yet. I just want to emphasize that this is a render engine before a game engine, no matter how much I want the latter.
|
||||
|
||||
## Cameras
|
||||
Absolute pain, never again. Jokes aside I just need to do more research because right now it looks like this:
|
||||
|
||||
{{< youtube anVOEiAujAY >}}
|
||||
|
||||
Should just leave it static right now with no movement...
|
||||
|
||||
## Physics
|
||||
Well, more of the research of it for Java. The best solution would be to use [JBullet](http://jbullet.advel.cz/), an outdated port of Bullet. It's the easiest to set up and using LibGDX port while similar, has no real prebuilt support for shapes and has to be done manually. LWJGL has a binding, but with a client-server architecture which is just terrible for doing anything simple. The only problem is, it uses javax.vecmath while right now I'm using JOML. Managing both is a pain and javax.vecmath has Transform objects, similar to Unity, so I'm gonna need to refractor a lot to use vecmath.
|
||||
|
||||
## ECS
|
||||
For ECS I'm gonna go with [Ashley](https://github.com/libgdx/ashley), a LibGDX solution. It seems like the only one used for games but not hard to build from scratch either, as a concept. Of course, I'm not going to dump a bunch of hours into custom-made when this is good enough. Although I don't know much in this and it is mainly up to developers on how they should organize this and this may change.
|
||||
|
||||
## Model Loading
|
||||
This is in no way finished as it is not grabbing all possible data right now, which is kind of driving me nuts but I'm gonna try to ignore it for now until the data being grabbed, like material data, can be used in engine. Here it is so far, using the smiley texture and the dragon model:
|
||||
|
||||

|
||||
BIN
content/post/butter-engine-april2023/featured-image.png
Normal file
|
After Width: | Height: | Size: 299 KiB |
23
content/post/butter-engine-april2023/index.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: "Butter Engine: April 2023"
|
||||
date: 2022-08-21T15:02:56-04:00
|
||||
lastmod: 2022-08-21T16:02:56-04:00
|
||||
# date: YEAR-MONTH-DAYTHOUR:MINUTE:SECOND-04:00
|
||||
draft: true
|
||||
|
||||
# author: "LitlToast"
|
||||
# authorLink: "https://higgy999.github.io"
|
||||
description: "A lot has changed, let's jump right in."
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Butter Engine", "Update", "Programming"]
|
||||
categories: ["butterengine"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
Butter Engine (Java): UI, Physics, and Maps Post
|
||||
Now in Rust, Java struggles
|
||||
Whats Rust Like
|
||||
BIN
content/post/clickcounter-v2.4.0/featured-image.png
Normal file
|
After Width: | Height: | Size: 225 KiB |
75
content/post/clickcounter-v2.4.0/index.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: "Click Counter v2.4.0 Release"
|
||||
date: 2023-06-23T12:00:00-04:00
|
||||
lastmod: 2023-06-23T12:00:00-04:00
|
||||
|
||||
description: "Right clicks, general refactor, more stable/modern codebase, QOL features."
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Minecraft", "Modding", "Release", "Features", "Left Click Counter Mod", "Click Counter"]
|
||||
categories: ["clickcounter"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
Formally known as Left Click Counter Mod, Click Counter counts your left and right clicks and displays them on your Minecraft HUD. Version 2.4.0 saw the introduction of right clicks, a general refactor, a more stable/modern codebase, and QOL features. Note: a migration of your previous config is needed (located in `.minecraft/config/LeftClickCounter.cfg`). Copy the value in the `SHHH...` key to value in `Clicks` under the `Left` catergory (located in `.minecraft/config/Clicks.cfg`).
|
||||
|
||||
## Changelog
|
||||
|
||||
### General
|
||||
- New
|
||||
- Added right clicks
|
||||
- Option to toggle the display of left/right clicks
|
||||
- Changes
|
||||
- Renamed to Click Counter Mod
|
||||
- Removed unused assets
|
||||
- Removed support for other Minecraft versions (I welcome pull requests with ports to other versions)
|
||||
- MIT Open Source License
|
||||
- Forge 1.8.9 Gradle MDK included
|
||||
- Note: Java 1.8 is required for this Gradle to work, the Gradle project must not be imported into IntelliJ
|
||||
- `.gitignore` excludes project generated files
|
||||
- Overhaul
|
||||
- Settings/config file has been heavily refactored
|
||||
- Known Bugs
|
||||
- Older configs no longer work (won't fix)
|
||||
|
||||
### Positioning
|
||||
- New
|
||||
- Added "Go back" button to return to the main page
|
||||
- Overhauls
|
||||
- Clicking and dragging the text moves it around and saves its position on release
|
||||
- Previously: A left click on the text selected it and and right clicked saved it in a new position, no feedback was given to the user on if the text was moving
|
||||
- Known Bugs
|
||||
- Both lines of text can be moved at the same time, leading to them always being selected together after saving (planned for 2.4.1)
|
||||
|
||||
### Colors
|
||||
- Changes
|
||||
- Friendly naming for chroma and shadow options
|
||||
- Fixes
|
||||
- Chroma and shadow options are now reflected in the "Test Color" text
|
||||
- The "Refresh Color" button is more stable and will no longer crash from text input errors
|
||||
- Planned
|
||||
- Remove the "Refresh Color" button and update the colors on the fly (planned for 2.4.1)
|
||||
|
||||
### Prefixes
|
||||
- Changes
|
||||
- Removed the symbol option and merged it with the entire prefix
|
||||
- Note: a space should be included and must be done so by the user
|
||||
|
||||
### Update Checking
|
||||
- Overhauls
|
||||
- Updates are now checked through GitHub's REST API
|
||||
- Removed auto checking for updates on server join (prone to crashes with a race condition if the response from the API was recieved before the game server loaded)
|
||||
- Failed update checks are sent silently to the console
|
||||
- Known Bugs
|
||||
- No response for if there are no updates avaible (planned for 2.4.1)
|
||||
- Older users are no longer notified of updates (won't fix)
|
||||
|
||||
## Downloads
|
||||
[Release Page](https://github.com/joshuafhiggins/clickcounter/releases/tag/v2.4.0)
|
||||
[Click.Counter.v2.4.0.jar](https://github.com/joshuafhiggins/clickcounter/releases/download/v2.4.0/Click.Counter.v2.4.0.jar) (from GitHub)
|
||||
|
||||
## Source Code
|
||||
The source code for Click Counter is avaible [on GitHub](https://github.com/joshuafhiggins/clickcounter/) under the MIT License.
|
||||
BIN
content/post/clickcounter-v2.4.1/featured-image.png
Normal file
|
After Width: | Height: | Size: 225 KiB |
36
content/post/clickcounter-v2.4.1/index.md
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: "Click Counter v2.4.1 Release"
|
||||
date: 2023-06-24T12:00:00-04:00
|
||||
lastmod: 2023-06-24T12:00:00-04:00
|
||||
|
||||
description: "Bug fixes"
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Minecraft", "Modding", "Release", "Fixes", "Left Click Counter Mod", "Click Counter"]
|
||||
categories: ["clickcounter"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Changelog
|
||||
|
||||
### Positioning
|
||||
- Fixed
|
||||
- Both lines of text can be moved at the same time, leading to them always being selected together after saving
|
||||
|
||||
### Colors
|
||||
- Changes
|
||||
- Removed the "Refresh Color" button and now update the colors on the fly
|
||||
|
||||
### Update Checking
|
||||
- Fixed
|
||||
- Added response for if there are no updates avaible
|
||||
|
||||
## Downloads
|
||||
[Release Page](https://github.com/joshuafhiggins/clickcounter/releases/tag/v2.4.1)
|
||||
[Click.Counter.v2.4.1.jar](https://github.com/joshuafhiggins/clickcounter/releases/download/v2.4.1/Click.Counter.v2.4.1.jar) (from GitHub)
|
||||
|
||||
## Source Code
|
||||
The source code for Click Counter is avaible [on GitHub](https://github.com/joshuafhiggins/clickcounter/) under the MIT License.
|
||||
BIN
content/post/example/featured-image.png
Normal file
|
After Width: | Height: | Size: 299 KiB |
14
content/post/example/index.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: "Example"
|
||||
date: 2023-08-21 00:00:00+0000
|
||||
lastmod: 2023-08-21 00:00:00+0000
|
||||
draft: true
|
||||
description: "Description"
|
||||
image: featured-image.png
|
||||
tags: ["Tag"]
|
||||
categories: ["Project"]
|
||||
---
|
||||
|
||||
Description
|
||||
|
||||
<!--more-->
|
||||
BIN
content/post/general-catchingup/featured-image.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
44
content/post/general-catchingup/index.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: "Catching Up & Centralizing"
|
||||
date: 2021-08-08T20:29:20-04:00
|
||||
lastmod: 2022-08-22T19:13:30-04:00
|
||||
draft: false
|
||||
|
||||
description: "General things I need to do with the site"
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Website", "General"]
|
||||
categories: ["general"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Catching Up
|
||||
There's a lot that hasn't been covered yet on other projects that would just take way too long to write pages and posts for those pages on projects that were canceled or have seen very little progress. I plan on updating this site every week with what I have been up to.
|
||||
|
||||
### Left Click Counter Mod
|
||||
The only thing I would change or work on with this is the system detecting left clicks. Which looking back, is not at all accurate. Although this would require me to change the updating system and as explained in [the centralizing section](#centralizing), this probably won't happen.
|
||||
|
||||
### Game Time Mod
|
||||
I think this would be more suited as a general-purpose desktop app that works similar to the way Steam keeps track of hours. It would also be a general-purpose, statistic-keeping app with a name change.
|
||||
|
||||
### Sparticus
|
||||
Yeah ummm... got a little too ambitious with it. At the time of the announcement, I knew very little about Unity, and because of how Unity works at a very high level, you either use tutorials or sit confused about it, doing nothing. Aside from that, texturing alone took forever and got me burnt out. The networking, which was promising at first, turned into a system that I was making changes to with no idea if anything was working. Essentially a programmer's worst nightmare, being stuck in a pandamonium of whether to continue or not with something that would be a pain to debug later. I'm not completely lost on the idea. Sonic Ether's ray tracer for Java Edition is still in early development and doesn't use any of the fancy RTX/DLSS features or the AMD counterparts. Continuum Shaders have similar goals, like redoing the graphics engine with the latest OpenGL and then going to Vulkan later. They also plan on using the new ray tracing and upscaling features too! Google Search Console for the website clearly shows people have an interest in high fidelity, PVP clients.
|
||||
|
||||
### Underground Duels
|
||||
This project started sensibly as a way to play a deathmatch FPS on school Chromebooks and learn how to use Mirror Networking at the same time. One small problem though, FPS games are very mice reliant. The alternative would be to have keys on the keyboard function similar to joysticks. It also always bugged me that the only way people talked about networking movement in Mirror was through always trusting the client. This bugged me a lot. Then I remembered of The Ship. A fun, murdering delight with the remastered *(Remasted)* made in Unity! But no progress was made here either as it's extremely hard to decompile and C# out of Unity 2015 due to so many issues with version compatibility that it's not worth the hassle for anyone to do. The remastered version is broken now as no localhost connections will work despite whatever configuration. I sent an email to their support team on the issue and offered my help to fix it, but I haven't gotten a response.
|
||||
|
||||
### TF2 OpenGL & Java
|
||||
Postponed until Butter Engine is "done" read [here](/butter-dejavu) on my current work with Butter Engine for more info. I followed [LearnOpenGL.com's](https://learnopengl.com) tutorial to get started on this. This was kind of my deja vu when working on Butter Engine.
|
||||
|
||||
### Weeb Detector
|
||||
Although just a one-off thing, I may add more prank features or make it Linux/MacOS compatible. It did help me get more familiar with networking in Java.
|
||||
|
||||
## Centralizing
|
||||
I would like to merge the Sparticus site into here and update Left Click Counter mod to use this site for updating and whatnot, but seems very easy to over-engineer and mess up the update process. So I'm going to leave it like it is for now unless I get bored and run out of projects. I'm also working on adding a page on here for every project.
|
||||
|
||||
*So when I'm old and decrepit, I'll update my first ever Minecraft mod.*
|
||||
|
||||
|
||||
BIN
content/post/prank-suite-release/featured-image.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
44
content/post/prank-suite-release/index.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: "Prank Suite Release"
|
||||
date: 2023-04-08T22:12:00-04:00
|
||||
lastmod: 2023-04-08T22:12:00-04:00
|
||||
# date: YEAR-MONTH-DAYTHOUR:MINUTE:SECOND-04:00
|
||||
draft: false
|
||||
|
||||
# author: "LitlToast"
|
||||
# authorLink: "https://higgy999.github.io"
|
||||
description: "The next step in pranking your friends and family."
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Update", "Release", "Programming"]
|
||||
categories: ["pranksuite"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
NOTE: This software can be used maliciously. I am no way responsible for the use of this software and encourage its use in good faith.
|
||||
|
||||
## Features
|
||||
- See and close open user's windows
|
||||
- Trigger popups with custom text
|
||||
- Trigger HTML popups
|
||||
- Remotely play sounds
|
||||
- Remotely change the user's wallpaper
|
||||
|
||||
## Changes since Weeb Detector
|
||||
- Trigger HTML popups
|
||||
- Remotely play sounds
|
||||
- UI Redesign for ease of pranking
|
||||
- Ability to transfer files for all pranks
|
||||
|
||||
## Setup
|
||||
1. Download the source code from [GitHub](https://github.com/joshuafhiggins/PrankSuite)
|
||||
2. Open the project in IntelliJ and change the `SERVER_IP` in `PSClient.java` to your computers local IP address
|
||||
3. Build the server and client artifacts
|
||||
4. Download [JavaFX SDK](https://gluonhq.com/products/javafx/) and extract it somewhere safe
|
||||
5. When running the client and server, add `--module-path .\PATH_TO\javafx-sdk-XX.X.X\lib` and `--add-modules=javafx.controls,javafx.fxml,javafx.web` to the run command
|
||||
|
||||
## The Development Path
|
||||
By default, Kyronet doesn't support sending files across the network. Although this post is being made way after release, I remember this process being hard to debug, but this isn't a fault of Kyronet. Both the client and server are kept in one source file. I never want to design an app like this again, but it was a carryover from Weeb Detector which was smaller in scope. Like most things, I want to remake this in Rust and have an easier way of changing the supplied IP address to the client.
|
||||
BIN
content/post/site-redesigned-2022/featured-image.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
22
content/post/site-redesigned-2022/index.md
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: "I Redesigned the Site"
|
||||
date: 2022-08-23T00:09:32-04:00
|
||||
lastmod: 2022-08-23T00:09:32-04:00
|
||||
draft: false
|
||||
|
||||
description: "Hopefully this will not be a yearly tradition of me updating the site, making one post, and leaving it untouched."
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Website", "Update"]
|
||||
categories: ["general"]
|
||||
|
||||
toc: false
|
||||
---
|
||||
|
||||
Hopefully this will not be a yearly tradition of me updating the site, making one post, and leaving it untouched.
|
||||
|
||||
<!--more-->
|
||||
|
||||
I wanted to write some posts this summer, _(not really this summer more like five days ago)_, and either Jekyll wouldn’t put them into each projects’ feed or they wouldn’t show up. I had recently watched “_[Hugo in 100 seconds](https://www.youtu.be/0RKpf3rK57I)_” by [Fireship](https://www.youtube.com/c/Fireship) and had been looking at themes for a bit. So then instead of trying to recall what painful, voodoo witchcraft I needed to do to actually get these posts to display, _(this was because I made my own theme, Jekyll is actually very cool)_ I switched over to Hugo and the LoveIt theme. I’ll probably fork and mess around with a custom color palette, but it’s now way simpler to write a post, just do ```hugo new content\posts\postname\index.md``` and write! Another reason for the move is that I won’t get security alerts for the Gemfile being out of date, Hugo isn’t included in the website repo and everything is just a mostly static webpage anyways. The theme also looks more modern than the old one, and it supports comments. I’m unsure whether or not to allow comments or if I can under GitHub pages. By the way, go check out the video. The guy makes good informational content.
|
||||
|
||||
{{< youtube 0RKpf3rK57I >}}
|
||||
BIN
content/post/spring-break-redesign/april2023-bard.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
content/post/spring-break-redesign/april2023-toaster.png
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
content/post/spring-break-redesign/april2023-website.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
content/post/spring-break-redesign/featured-image.png
Normal file
|
After Width: | Height: | Size: 3.9 MiB |
49
content/post/spring-break-redesign/index.md
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: "Spring Cleaning: April 2023"
|
||||
date: 2023-04-08T14:55:00-04:00
|
||||
lastmod: 2023-04-08T14:55:00-04:00
|
||||
# date: YEAR-MONTH-DAYTHOUR:MINUTE:SECOND-04:00
|
||||
draft: false
|
||||
|
||||
# author: "LitlToast"
|
||||
# authorLink: "https://higgy999.github.io"
|
||||
description: "I made no posts for the rest of 2022, since the last redesign, and then I felt like redesigning the site again. (AI generated image btw)"
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Website", "General"]
|
||||
categories: ["general"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Updated Website
|
||||
|
||||
```
|
||||
Changes:
|
||||
- Redid color palette for light and dark mode
|
||||
- New header with translucency
|
||||
- Rounded scroll bar
|
||||
- Replaced fonts with Ubuntu, JetBrains Mono, and Stratum 2 (from Counter-Strike 2)
|
||||
|
||||
Known Bugs:
|
||||
- General: Dark mode is too blue
|
||||
- Mobile: Hamburger menu missing when reading a post, this existed before but really shouldn't have
|
||||
```
|
||||
|
||||

|
||||
|
||||
Light theme looks better than before, and better than dark mode in my opinion. The new header bar is inspired by Hearthstone's website too, although I kept some of the old design on mobile. Several changes had to be made to the theme itself, at some point I need to find a way to move all changes that were made to `_override.scss`. Maybe now I'll make an update post for Prank Suite?
|
||||
|
||||
## Discord Server
|
||||
|
||||
I made a [Discord server](https://discord.gg/b48D4m8jNs)! There's channels for asking for help with Java, Kotlin, and Rust, as well as helpful resources. I encourage everyone to put your favorite resources for the languages in their respective channels. I often forget cool things I find and this will be my way of having a whole list to revisit anytime I want. You can also showcase your projects as a thread in the [`#showcase`](https://discord.gg/b48D4m8jNs) channel. I look forward to seeing you there!
|
||||
|
||||
 
|
||||
|
||||
## Plans & Current Projects
|
||||
|
||||
If you have been following my GitHub while this website was abandoned, I've been making projects in Rust and loving them. I'm going to be moving Butter Engine to Rust and have progressed about as far as the last blog post on the Engine, in terms of rendering. This would be the 3rd time I have redone Butter Engine, and ultimately I don't care! Rust is forcing me to write better code for when I build off of the engine in the future and I felt that moving forward with what I have in Java would be a headache in many ways. I'll make this into it's own post, but for right now I want to move all my workflows to Rust to learn it better. I guess that means I need to find a Hugo alternative but I'll wait another year and no blog posts for that 😉.
|
||||
|
||||
So to recap, I have a new [Discord server](https://discord.gg/b48D4m8jNs) for programmers, made the website look nice, my life in Rust, two more posts coming next week, and who knows what will happen after this break ends?
|
||||
BIN
content/post/tf2classic-docker/featured-image.png
Normal file
|
After Width: | Height: | Size: 7.6 MiB |
87
content/post/tf2classic-docker/index.md
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
title: "TF2 Classic Dedicated Server - Docker Image"
|
||||
date: 2023-06-21T19:00:00-04:00
|
||||
lastmod: 2022-08-21T19:00:00-04:00
|
||||
|
||||
description: "TF2C dedicated server image, made from cm2network's TF2 image. Art by Hunter R. Thompson"
|
||||
image: "featured-image.png"
|
||||
|
||||
tags: ["Docker", "Releases", "TF2 Classic"]
|
||||
categories: ["General"]
|
||||
---
|
||||
|
||||
{{< param description >}}
|
||||
|
||||
<!--more-->
|
||||
|
||||
I created this Docker image for my own servers, but have released it for anyone to use.
|
||||
|
||||
[](https://hub.docker.com/r/litltoast/tf2-classic/) [](https://hub.docker.com/r/litltoast/tf2-classic/) [](https://microbadger.com/images/litltoast/tf2-classic)
|
||||
## Supported tags and respective `Dockerfile` links
|
||||
- [`base`, `latest` (*Dockerfile*)](https://github.com/joshuafhiggins/TF2-Classic/blob/master/Dockerfile)
|
||||
|
||||
## How to use this image
|
||||
### Hosting a simple game server
|
||||
|
||||
Running on the *host* interface (recommended):<br/>
|
||||
```console
|
||||
$ docker run -d -it --net=host --name=tf2classic -e SRCDS_TOKEN={YOURTOKEN} litltoast/tf2-classic
|
||||
```
|
||||
|
||||
Running using a bind mount for data persistence on container recreation:
|
||||
```console
|
||||
$ mkdir -p $(pwd)/tf2-data
|
||||
$ chmod 777 $(pwd)/tf2-data # Makes sure the directory is writeable by the unprivileged container user
|
||||
$ docker run -d -it --net=host -v $(pwd)/tf2-data:/home/steam/tf2classic-dedicated/ --name=tf2classic -e SRCDS_TOKEN={YOURTOKEN} litltoast/tf2-classic
|
||||
```
|
||||
|
||||
Running multiple instances (increment SRCDS_PORT and SRCDS_TV_PORT):
|
||||
```console
|
||||
$ docker run -d -it --net=host --name=tf2classic-2 -e SRCDS_PORT=27016 -e SRCDS_TV_PORT=27021 -e SRCDS_TOKEN={YOURTOKEN} litltoast/tf2-classic
|
||||
```
|
||||
|
||||
`SRCDS_TOKEN` **is required to be listed & reachable. Generate one here using AppID `243750`:**
|
||||
[https://steamcommunity.com/dev/managegameservers](https://steamcommunity.com/dev/managegameservers)<br/><br/>
|
||||
`SRCDS_WORKSHOP_AUTHKEY` **is required to use workshop features:**
|
||||
[https://steamcommunity.com/dev/apikey](https://steamcommunity.com/dev/apikey)<br/>
|
||||
|
||||
**It's also recommended to use "--cpuset-cpus=" to limit the game server to a specific core & thread.**<br/>
|
||||
|
||||
## Configuration
|
||||
### Environment Variables
|
||||
Feel free to overwrite these environment variables, using -e (--env):
|
||||
```dockerfile
|
||||
SRCDS_TOKEN="changeme" (value is is required to be listed & reachable, retrieve token here (AppID 440): https://steamcommunity.com/dev/managegameservers)
|
||||
SRCDS_RCONPW="changeme" (value can be overwritten by tf/cfg/server.cfg)
|
||||
SRCDS_PW="changeme" (value can be overwritten by tf/cfg/server.cfg)
|
||||
SRCDS_PORT=27015
|
||||
SRCDS_TV_PORT=27020
|
||||
SRCDS_IP="0" (local ip to bind)
|
||||
SRCDS_FPSMAX=300
|
||||
SRCDS_TICKRATE=66
|
||||
SRCDS_MAXPLAYERS=14
|
||||
SRCDS_REGION=3
|
||||
SRCDS_STARTMAP="ctf_2fort"
|
||||
SRCDS_HOSTNAME="New TF Server" (first launch only)
|
||||
SRCDS_WORKSHOP_AUTHKEY="" (required to load workshop maps)
|
||||
```
|
||||
### Config
|
||||
TF2 Configs not guarenteed to work in TF2 Classic.
|
||||
|
||||
You can edit the config using this command:
|
||||
```console
|
||||
$ docker exec -it tf2classic nano /home/steam/tf2classic-dedicated/tf2classic/cfg/server.cfg
|
||||
```
|
||||
|
||||
If you want to learn more about configuring a TF2 server check this [documentation](https://wiki.teamfortress.com/wiki/Dedicated_server_configuration).
|
||||
|
||||
## Image Variants
|
||||
|
||||
### `tf2-classic:latest`
|
||||
This is the only image
|
||||
|
||||
## Contributors
|
||||
[](https://github.com/joshuafhiggins/TF2-Classic/graphs/contributors)
|
||||
|
||||
## The Making of the Image
|
||||
The original image from cm2network used `git clone` to pull the `entry.sh` script changes into the image. This meant that new containers would not get the entry script changes, unless the whole image was scrapped and rebuilt. Docker doesn't rebuild images if the `Dockerfile` hasn't changed, but the image needs to change if the script has changed. The solution was to simply use the `COPY` command in the `Dockerfile`. Besides that, making the Docker image was smooth. I plan on making one for [my Discord bot](https://discord.gg/b48D4m8jNs) next and to find other cool services to spin up on my home server.
|
||||