Skip to content

Commit fc8de6a

Browse files
authored
Bulk uploaded everything
1 parent e4ce373 commit fc8de6a

18 files changed

+540
-0
lines changed

game/bulwark.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Loading...</title>
7+
<script src="../scripts/script.js"></script>
8+
<link rel="stylesheet" href="../styles/style.css">
9+
</head>
10+
<body>
11+
</body>
12+
</html>

game/customminigames.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Loading...</title>
7+
<script src="../scripts/script.js"></script>
8+
<link rel="stylesheet" href="../styles/style.css">
9+
</head>
10+
<body>
11+
</body>
12+
</html>

game/doomed.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Loading...</title>
7+
<script src="../scripts/script.js"></script>
8+
<link rel="stylesheet" href="../styles/style.css">
9+
</head>
10+
<body>
11+
</body>
12+
</html>

game/nullxiety.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Loading...</title>
7+
<script src="../scripts/script.js"></script>
8+
<link rel="stylesheet" href="../styles/style.css">
9+
</head>
10+
<body>
11+
</body>
12+
</html>

game/paxamericana.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Loading...</title>
7+
<script src="../scripts/script.js"></script>
8+
<link rel="stylesheet" href="../styles/style.css">
9+
</head>
10+
<body>
11+
</body>
12+
</html>

games.json

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"games": [
3+
{
4+
"id": "customminigames",
5+
"name": "Custom Minigames",
6+
"link": "https://www.roblox.com/games/4796282774/Custom-Minigames",
7+
"creator": "Customs Community",
8+
"description": "A fun little cozy game to pass the time, collect stuff, meet new people, compete in chill leaderboards, and hangout. Basically a barebones alternative to Epic Minigames.",
9+
"submitted_by": "Kleosfellow",
10+
"icon": "https://tr.rbxcdn.com/180DAY-b770e62404557f27161e2fc0ecd122c6/256/256/Image/Webp/noFilter",
11+
"banner": "https://tr.rbxcdn.com/180DAY-adf5000fe8a73a236d6fe8fd1d7a4f4b/768/432/Image/Webp/noFilter",
12+
"genres": ["Medium", "Minigames", "Oldschool", "Hangout"],
13+
"age": "all ages",
14+
"R6": true,
15+
"R15": false,
16+
"vc": true
17+
},
18+
{
19+
"id": "paxamericana",
20+
"name": "Pax Americana",
21+
"link": "https://www.roblox.com/games/2599040464/Pax-Americana",
22+
"creator": "xLawOut",
23+
"description": "Very fun game with lots of things to do, super heated and very active factions gameplay, tight-knit community, and 2017-era gameplay style with robust mechanics and weapons. It is a bit toxic and polarized, but the moderators are mature and the owner is present. Great alternative to The Wild West.",
24+
"submitted_by": "Kleosfellow",
25+
"icon": "https://tr.rbxcdn.com/180DAY-bfae57c52658432efff59c02d4b53ef6/256/256/Image/Webp/noFilter",
26+
"banner": "https://tr.rbxcdn.com/180DAY-5c8dc1d7deff8900f2cc2546cbfa4040/768/432/Image/Webp/noFilter",
27+
"genres": ["Medium", "Shooting", "Western", "Factions", "Indie", "Open world"],
28+
"age": "13+",
29+
"R6": true,
30+
"R15": false,
31+
"vc": false
32+
},
33+
{
34+
"id": "bulwark",
35+
"name": "Bulwark",
36+
"link": "https://www.roblox.com/games/6168898345/Bulwark",
37+
"creator": "ChiaPetDie",
38+
"description": "Highly realistic R6 game having solid, satisfactory, and historically acurrate mechanics, with rich gameplay styles and character custumization. Bulwark has a lot of weapons to choose from, and mechanics like parrying, feinting, and deflecting. Solid game with a nice lore, medieval fun, and a gorgeous map.",
39+
"submitted_by": "Kleosfellow",
40+
"icon": "https://tr.rbxcdn.com/180DAY-c3b455cea7114d8a2a1a4a16c7ea301f/256/256/Image/Webp/noFilter",
41+
"banner": "https://tr.rbxcdn.com/180DAY-b33408c5b226300cab9e71179fb42bd1/768/432/Image/Webp/noFilter",
42+
"genres": ["Medium", "Medieval", "Realistic", "Melee"],
43+
"age": "13+",
44+
"R6": true,
45+
"R15": false,
46+
"vc": true
47+
},
48+
{
49+
"id": "nullxiety",
50+
"name": "Nullxiety",
51+
"link": "https://www.roblox.com/games/3723475719/Nullxiety",
52+
"creator": "Nullxiety",
53+
"description": "A horror-like game where you and up to 100 other people (generally its just you as the game is a bit dead) participate in various challenges so that \"Null\" can discover who is the strongest player. Has some nice amount of lore, but it is a hard game and it needs a lot of thinking.",
54+
"submitted_by": "Kleosfellow",
55+
"icon": "https://tr.rbxcdn.com/180DAY-57adc96998e5639e05f6e5dda0fa2f60/256/256/Image/Webp/noFilter",
56+
"banner": "https://tr.rbxcdn.com/180DAY-bde1ee72576aeb31e388d3d13aeb033f/768/432/Image/Webp/noFilter",
57+
"genres": ["Small", "Horror", "Social experiment", "Indie"],
58+
"age": "13+",
59+
"R6": true,
60+
"R15": false,
61+
"vc": false
62+
},
63+
{
64+
"id": "doomed",
65+
"name": "Doomed",
66+
"link": "https://www.roblox.com/games/18630833975/DOOMED-Alpha-2",
67+
"creator": "LuaShoe",
68+
"description": "An open world fighting game, where you can play as about 22 different creatures and monsters ranging from oversized moths made out of cloth, three-legged mammals made out of sand, giant rock titans that came straight from ancient Old World mythology, to even sentient naturally-exploding bio-mechanic animals, all with different abilities. One of the best games of all Roblox, and it has a mildly active community.",
69+
"submitted_by": "Kleosfellow",
70+
"icon": "https://tr.rbxcdn.com/180DAY-19fa640a8f172f267af04ccd2ab9d2c2/256/256/Image/Webp/noFilter",
71+
"banner": "https://tr.rbxcdn.com/180DAY-ad50dd67af0c6f78a828a20af523c91f/768/432/Image/Webp/noFilter",
72+
"genres": ["Small", "Battlegrounds", "Open world", "Indie"],
73+
"age": "all ages",
74+
"R6": false,
75+
"R15": true,
76+
"vc": false
77+
}
78+
]
79+
}

images/openwing.png

157 KB
Loading

images/openwing2.png

871 KB
Loading

images/openwingfixed.png

137 KB
Loading

images/openwingnotext.png

553 KB
Loading

images/r15.png

11 KB
Loading

images/r6.png

47.7 KB
Loading

images/vc.png

448 Bytes
Loading

index.html

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Openwing Roblox</title>
7+
<link rel="stylesheet" href="styles/style.css">
8+
<link rel="icon" type="image/png" href="/images/openwing2.png"/>
9+
</head>
10+
<body>
11+
<article>
12+
<header id="main-page">
13+
<center><img src="images/openwingnotext.png"></center>
14+
<h1 id="openwing">Openwing</h1>
15+
<p>Underrated Roblox Games Catalog - Find Hidden Gems</p>
16+
</header>
17+
<div id="search-container">
18+
<input type="text" id="searchInput" placeholder="Search for games..." onkeyup="searchGames()">
19+
<ul id="resultList"></ul>
20+
</div>
21+
<center><a href="https://github.com/open-wing/open-wing.github.io" target="_blank">github</a><a href="https://github.com/open-wing/open-wing.github.io/blob/main/README.md" target="_blank">contribute</a><a href="https://pyrspi.github.io" target="_blank">credits</a></center>
22+
<script src="scripts/search.js"></script>
23+
<script src="scripts/script.js"></script>
24+
</article>
25+
</body>
26+
</html>

scripts/script.js

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
document.addEventListener("DOMContentLoaded", () => {
2+
const isIndexPage = window.location.pathname.endsWith("index.html") || window.location.pathname === "/";
3+
const gamesJSONPath = "../games.json";
4+
5+
if (isIndexPage) {
6+
loadGamesList(gamesJSONPath);
7+
} else {
8+
loadGameDetails(gamesJSONPath);
9+
}
10+
});
11+
12+
/*
13+
function loadGamesList(jsonPath) {
14+
fetch(jsonPath)
15+
.then(response => response.json())
16+
.then(data => {
17+
const games = data.games;
18+
const gamesList = document.getElementById("games-list");
19+
20+
games.forEach(game => {
21+
const gameLink = document.createElement("a");
22+
gameLink.href = `game/${game.id}.html`;
23+
gameLink.textContent = game.name;
24+
gameLink.style.display = "block";
25+
gamesList.appendChild(gameLink);
26+
});
27+
});
28+
}
29+
*/
30+
31+
function loadGameDetails(jsonPath) {
32+
const currentPage = window.location.pathname.split("/").pop().replace(".html", "");
33+
fetch(jsonPath)
34+
.then(response => response.json())
35+
.then(data => {
36+
const game = data.games.find(g => g.id === currentPage);
37+
38+
if (!game) {
39+
document.body.innerHTML = "<h1>Game not found</h1>";
40+
return;
41+
}
42+
43+
document.title = "OW - " + game.name;
44+
const favicon = document.createElement("link");
45+
favicon.rel = "icon";
46+
favicon.href = game.icon;
47+
document.head.appendChild(favicon);
48+
49+
document.body.innerHTML = `<a href="../index.html"><img id="fixed-img" src="../images/openwingfixed.png"></a><article>
50+
<header>
51+
<h1 id="game-title">${game.name}</h1>
52+
</header>
53+
<main>
54+
<center><img id="game-banner" src="${game.banner}" alt="Game Banner"></center>
55+
<section>
56+
<img id="game-icon" src="${game.icon}" alt="Game Icon">
57+
<em><p id="game-description">"${game.description}"</p></em>
58+
<p><i>Creator:</i> <span id="game-creator">${game.creator}</span></p>
59+
<p><i>Submitted by:</i> <span id="submitted-by">${game.submitted_by}</span></p>
60+
<p><i>Genres:</i> <span id="game-genres">${game.genres.join(" • ")}</span></p>
61+
<div id="movement-support"></div>
62+
</section>
63+
<a id="game-link" href="${game.link}" target="_blank">Play on Roblox</a>
64+
</main>
65+
</article>`;
66+
67+
const movementContainer = document.getElementById("movement-support");
68+
if (game.R6) {
69+
const r6Image = document.createElement("img");
70+
r6Image.src = "../images/r6.png";
71+
r6Image.title = "Supports R6";
72+
movementContainer.appendChild(r6Image);
73+
}
74+
if (game.R15) {
75+
const r15Image = document.createElement("img");
76+
r15Image.src = "../images/r15.png";
77+
r15Image.title = "Supports R15";
78+
movementContainer.appendChild(r15Image);
79+
}
80+
if (game.vc) {
81+
const vcImage = document.createElement("img");
82+
vcImage.src = "../images/vc.png";
83+
vcImage.title = "Supports Voice Chat";
84+
movementContainer.appendChild(vcImage);
85+
}
86+
if (game.age) {
87+
const ageVal = document.createElement("p");
88+
ageVal.textContent = game.age;
89+
ageVal.title = "Age Restriction";
90+
movementContainer.appendChild(ageVal);
91+
}
92+
});
93+
}

scripts/search.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
let games = [];
2+
3+
// fetch the games.json file and store the data
4+
fetch("../games.json")
5+
.then(response => response.json())
6+
.then(data => {
7+
games = data.games;
8+
})
9+
.catch(error => console.error("Error fetching games JSON:", error));
10+
11+
function searchGames() {
12+
const input = document.getElementById("searchInput").value.toLowerCase();
13+
const resultList = document.getElementById("resultList");
14+
15+
// clear previous results
16+
resultList.innerHTML = "";
17+
18+
// filter games based on input
19+
const filteredGames = games.filter(game =>
20+
game.id.toLowerCase().includes(input) ||
21+
game.name.toLowerCase().includes(input) ||
22+
game.genres.some(tag => tag.toLowerCase().includes(input))
23+
);
24+
25+
// sort results to prioritize exact matches
26+
filteredGames.sort((a, b) => {
27+
const inputLower = input.toLowerCase();
28+
const aIsExactMatch = a.name.toLowerCase() === inputLower || a.id.toLowerCase() === inputLower;
29+
const bIsExactMatch = b.name.toLowerCase() === inputLower || b.id.toLowerCase() === inputLower;
30+
31+
if (aIsExactMatch && !bIsExactMatch) return -1;
32+
if (!aIsExactMatch && bIsExactMatch) return 1;
33+
34+
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
35+
});
36+
37+
// populate results
38+
filteredGames.forEach(game => {
39+
const li = document.createElement("li");
40+
const a = document.createElement("a");
41+
a.href = `game/${game.id}.html`;
42+
a.textContent = game.name;
43+
a.title = `${game.genres.join(" • ")}`;
44+
45+
const icon = document.createElement("img");
46+
icon.src = game.icon;
47+
icon.classList = "result-icon"
48+
li.appendChild(icon);
49+
50+
// in case it is an exact match or tag match
51+
if (game.name.toLowerCase() === input || game.name.toLowerCase() === input) {
52+
a.classList.add('exact-match');
53+
} else if (game.genres.some(tag => input.includes(tag.toLowerCase()))) {
54+
a.classList.add('tag-match');
55+
}
56+
57+
li.appendChild(a);
58+
resultList.appendChild(li);
59+
});
60+
}

styles/Inter-Regular.ttf

402 KB
Binary file not shown.

0 commit comments

Comments
 (0)