We are sorry to inform that the files for the project we're accidently deleted, except a few files still remained from the project.
Virtes Intergrated Game Development And Rapid Execution Environment 2000™ (or Virtes IGDREES2000) is a 2D game engine made in Visual Basic 6.0 available to download on itch.io and GameJolt! Available on 32-bit and 64-bit Windows 11-Windows XP!
© Copyright 2023–2025 Virtes LLC, Virtes Software LLC, and Virtes Games LLC. All rights reserved.
Virtes Integrated Game Development and Rapid Execution Environment System 2000™ is a professional Windows-based development suite that allows creators, developers, and game designers to build and execute interactive software projects rapidly and efficiently. Designed with classic software interfaces in mind, it offers a robust, familiar, and highly customizable editing experience.
This tool was developed for hobbyists and commercial developers alike, offering a full-featured project workspace with drag-and-drop elements, toolbar-driven logic, automatic execution pipelines, and support for enhanced runtime features.
For help, contact us via Mail: virtes.llc@gmail.com!
<!DOCTYPE html>
<html>
<head>
<title>Driver Menu</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<style>
html, body {
font-family: Helvetica;
background-image: linear-gradient(#FFA500, #FFFFFF);
background-repeat: no-repeat;
min-height: 100vh;
overflow: hidden;
}
@media (max-height: 500px) {
html, body {
overflow: auto;
}
}
h2 {
font-size: clamp(18px, 2.5vw, 40px);
}
button {
padding: 10px;
background-color: #FFA500;
color: #FFFFFF;
border-style: outset;
}
button:hover {
color: black;
background-color: white;
cursor: pointer;
}
button:active {
color: white;
background-color: black;
border-style: inset;
cursor: not-allowed;
}
.route-select {
width: 48%;
padding: 5px;
border: 2px dotted #000000;
margin-bottom: 20px;
display: inline-block;
vertical-align: top;
}
.stops-and-schedule {
width: 48%;
padding: 5px;
border: 2px dotted #000000;
margin-bottom: 20px;
display: inline-block;
vertical-align: top;
}
.popup-preview {
width: 48%;
padding: 5px;
border: 2px dotted #000000;
display: inline-block;
vertical-align: top;
}
#route-selector {
padding: 5px;
color: white;
background-color: #FFA500;
}
#route-selector:hover {
color: black;
background-color: white;
cursor: pointer;
}
#route-selector:active {
color: white;
background-color: black;
cursor: not-allowed;
}
#time {
font-family: Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif;
position: fixed;
bottom: 0;
right: 0;
margin: 0;
}
.stop-entry {
display: flex;
justify-content: space-between;
}
#lateness {
padding: 10px;
background-color: green;
color: white;
display: inline-block;
margin-top: 0;
}
#direction-toggle {
margin-top: 10px;
padding: 8px 15px;
font-size: 14px;
}
</style>
</head>
<body>
<h2 id="time">clock</h2>
<div class="route-select">
<h3>Útvonal kiválasztása</h3>
<select name="route" id="route-selector">
<option value="NIS">NIS - Nem szállít utasokat</option>
<option value="TEST">TEST - Teszt útvonal</option>
<option value="72">72 - Tó utca <> Vasút utca</option>
<option value="72A">72A - Feketerét utca <> Deák Ferenc utca</option>
<option value="72SB">72SB - Vasút utca <> Dohánybolt</option>
<option value="115">115 - Vasút utca <> Deák Ferenc utca</option>
<option value="237">237 - Deák Ferenc utca <> Nyár utca</option>
<option value="238">238 - Vasút utca <> Nyár utca</option>
<option value="258">258 - Feketerét utca <> Törökbálinti tó</option>
</select>
<br>
<p id="selectedRouteParagraph">Kiválasztva: </p>
<hr>
<button onclick="saveroute()" id="save-route-button">Mentés</button>
</div>
<div class="stops-and-schedule">
<h3>Menetrend és megállók</h3>
<p id="lateness">-0,0</p>
<button onclick="toggleDirection()" id="direction-toggle">Irány váltása</button>
<textarea placeholder="Megjegyzések"></textarea>
<hr>
<div class="stops">
<div id="schedule-container"></div>
</div>
<p id="scheduleParagraph"></p>
<button onclick="departedStop()" id="departedstop-button">Görget</button>
<button onclick="generatemenetrend()" title="Generál egy menetrendet, megadja mikor indul (hh:mm) az első állomásról, és az útvonal szerint egy menetrendet generál, ami szerint kell megálni a generált idő szerint a megfelelő állomásoknál." id="generate-schedule-button">Generálás menetrendet a mostani idő szerint</button>
</div>
<div class="popup-preview">
<h3>Előnézet</h3>
<details>
<summary>iframe előnézet</summary>
<iframe src="main-passenger.htm" title="Utas előnézet"></iframe>
</details>
<hr>
<button id="popup-preview" onclick="window.open('main-passenger.htm', 'newwindow', 'width=600,height=400'); return false;">Előnézet megnyitása egy új ablakban</button>
</div>
</body>
<script>
const routes = {
"NIS": [
{ stop: "Nem szállít utasokat", delay: 20 },
{ stop: "Nem szállít utasokat", delay: 40 },
{ stop: "Nem szállít utasokat", delay: 60 }
],
"TEST": [
{ stop: "1", delay: 1 },
{ stop: "2", delay: 2 },
{ stop: "3", delay: 3 },
{ stop: "4", delay: 4 },
{ stop: "5", delay: 5 },
{ stop: "6", delay: 6 },
{ stop: "7", delay: 7 },
{ stop: "8", delay: 8 },
{ stop: "9", delay: 9 },
{ stop: "10", delay: 10 }
],
"72": [
{ stop: "Tó utca", delay: 0 },
{ stop: "Feketerét utca", delay: 2 },
{ stop: "Törökbálint vasútállomás buszmegálló", delay: 4 },
{ stop: "Törökbálint vasútállomás", delay: 6 },
{ stop: "Egyenes út", delay: 8 },
{ stop: "Kerekdomb utca", delay: 10 },
{ stop: "Vasút utca", delay: 12 }
],
"72A": [
{ stop: "Feketerét utca", delay: 0 },
{ stop: "Törökbálint vasútállomás buszmegálló", delay: 2 },
{ stop: "Törökbálint vasútállomás", delay: 4 },
{ stop: "Egyenes út", delay: 6 },
{ stop: "Kerekdomb utca", delay: 8 },
{ stop: "Vasút utca", delay: 10 },
{ stop: "Vasút utca buszmegálló", delay: 12 },
{ stop: "Jókai Mór utca buszmegálló", delay: 14 },
{ stop: "Dohánybolt", delay: 15 },
{ stop: "Deák Ferenc utca", delay: 19 }
],
"72SB": [
{ stop: "Vasút utca", delay: 0 },
{ stop: "Vasút utca buszmegálló", delay: 2 },
{ stop: "Jókai Mór utca buszmegálló", delay: 4 },
{ stop: "Dohánybolt", delay: 5 }
],
"115": [
{ stop: "Vasút utca", delay: 0 },
{ stop: "Vasút utca buszmegálló", delay: 2 },
{ stop: "Jókai Mór utca buszmegálló", delay: 4 },
{ stop: "Dohánybolt", delay: 5 },
{ stop: "Deák Ferenc utca", delay: 8 }
],
"237": [
{ stop: "Deák Ferenc utca", delay: 0 },
{ stop: "Baross Gábor utca", delay: 2 },
{ stop: "Törökbálinti tó", delay: 4 },
{ stop: "Nyár utca buszmegálló", delay: 6 }
],
"238": [
{ stop: "Vasút utca", delay: 0 },
{ stop: "Vasút utca buszmegálló", delay: 2 },
{ stop: "Jókai Mór utca buszmegálló", delay: 4 },
{ stop: "Dohánybolt", delay: 5 },
{ stop: "Deák Ferenc utca", delay: 8 },
{ stop: "Baross Gábor utca", delay: 10 },
{ stop: "Törökbálinti tó", delay: 12 },
{ stop: "Nyár utca buszmegálló", delay: 14 }
],
"258": [
{ stop: "Feketerét utca", delay: 0 },
{ stop: "Törökbálint vasútállomás buszmegálló", delay: 2 },
{ stop: "Törökbálint vasútállomás", delay: 4 },
{ stop: "Egyenes út", delay: 6 },
{ stop: "Kerekdomb utca", delay: 8 },
{ stop: "Vasút utca", delay: 10 },
{ stop: "Vasút utca buszmegálló", delay: 12 },
{ stop: "Jókai Mór utca buszmegálló", delay: 14 },
{ stop: "Dohánybolt", delay: 15 },
{ stop: "Deák Ferenc utca", delay: 18 },
{ stop: "Baross Gábor utca", delay: 20 },
{ stop: "Törökbálinti tó", delay: 22 },
{ stop: "Nyár utca buszmegálló", delay: 24 }
]
};
let destination = "";
let currentStopIndex = 0;
let currentLateness = 0;
let departureOffset = 1;
let activeRouteStops = [];
let scheduledDepartureTime = null;
let lastMinute = -1;
let isReversed = false;
let stopScheduledTimes = [];
let currentRouteNumber = "";
function updateClock() {
const now = new Date();
let hours = now.getHours();
let minutes = now.getMinutes();
let seconds = now.getSeconds();
hours = hours.toString().padStart(2, '0');
minutes = minutes.toString().padStart(2, '0');
seconds = seconds.toString().padStart(2, '0');
document.getElementById("time").textContent = `${hours}:${minutes}:${seconds}`;
// Check if minute has changed
if (scheduledDepartureTime !== null && minutes !== lastMinute) {
lastMinute = minutes;
updateLatenessFromTime();
}
}
function updateLatenessFromTime() {
if (
stopScheduledTimes.length === 0 ||
currentStopIndex >= stopScheduledTimes.length
) {
return;
}
const now = new Date();
let actualMinute =
now.getHours() * 60 +
now.getMinutes() +
(now.getSeconds() / 60);
let scheduledMinute =
stopScheduledTimes[currentStopIndex];
currentLateness =
Math.round(
(actualMinute - scheduledMinute) * 2
) / 2;
updateLatenessDisplay();
}
function saveroute() {
let selector = document.getElementById('route-selector');
let selectedRoute = selector.options[selector.selectedIndex].text;
document.getElementById('selectedRouteParagraph').textContent = `Kiválasztva: ${selectedRoute}`;
localStorage.setItem("selectedRoute", selectedRoute);
}
function updateRouteInfo() {
// Update route number
localStorage.setItem("routeNumber", currentRouteNumber);
// Update destination (last stop in current direction)
let routeDestination = activeRouteStops[activeRouteStops.length - 1].stop;
localStorage.setItem("destination", routeDestination);
}
function updateStopInfo() {
// Current stop
localStorage.setItem(
"bottomStop",
activeRouteStops[currentStopIndex]
? activeRouteStops[currentStopIndex].stop
: "___"
);
// Next stop
localStorage.setItem(
"middleStop",
activeRouteStops[currentStopIndex + 1]
? activeRouteStops[currentStopIndex + 1].stop
: "___"
);
// Stop after next
localStorage.setItem(
"topStop",
activeRouteStops[currentStopIndex + 2]
? activeRouteStops[currentStopIndex + 2].stop
: "___"
);
}
function toggleDirection() {
if (activeRouteStops.length === 0 || stopScheduledTimes.length === 0) {
alert("Először generálj egy menetrendet!");
return;
}
isReversed = !isReversed;
activeRouteStops.reverse();
for (let i = 0; i < activeRouteStops.length; i++) {
activeRouteStops[i].delay = i * 2;
}
const now = new Date();
scheduledDepartureTime = now.getHours() * 60 + now.getMinutes() + 1;
stopScheduledTimes = [];
for (let i = 0; i < activeRouteStops.length; i++) {
stopScheduledTimes.push(scheduledDepartureTime + activeRouteStops[i].delay);
}
currentStopIndex = 0;
// Update route and stop info with new direction
updateRouteInfo();
updateStopInfo();
renderSchedule();
}
function renderSchedule() {
if (stopScheduledTimes.length === 0) {
return;
}
let html = "";
for (let i = 0; i < activeRouteStops.length; i++) {
let stop = activeRouteStops[i];
// Use the stored scheduled time
let totalMinutes = stopScheduledTimes[i];
let hour = Math.floor(totalMinutes / 60) % 24;
let minute = totalMinutes % 60;
let formattedHour = hour.toString().padStart(2, '0');
let formattedMinute = minute.toString().padStart(2, '0');
let fontWeight = i === currentStopIndex ? "bold" : "normal";
html += `
<div class="stop-entry" style="font-weight:${fontWeight}">
<span>${stop.stop}</span>
<span>${formattedHour}:${formattedMinute}</span>
</div>
<hr>
`;
}
document.getElementById("schedule-container").innerHTML = html;
updateLatenessFromTime();
}
function updateLatenessDisplay() {
let latenessElement =
document.getElementById("lateness");
let displayText = "";
let absoluteValue =
Math.abs(currentLateness);
let wholeMinutes =
Math.floor(absoluteValue);
let decimalPart =
absoluteValue % 1;
let decimalText =
decimalPart >= 0.5
? ",5"
: ",0";
if (currentLateness > 0) {
displayText =
`+${wholeMinutes}${decimalText}`;
}
else if (currentLateness < 0) {
displayText =
`-${wholeMinutes}${decimalText}`;
}
else {
displayText = "-0,0";
}
latenessElement.textContent =
displayText;
// Background colors
if (currentLateness <= -4) {
latenessElement.style.backgroundColor =
"white";
latenessElement.style.color =
"black";
}
else if (currentLateness <= -2) {
latenessElement.style.backgroundColor =
"blue";
latenessElement.style.color =
"white";
}
else if (currentLateness < 0) {
latenessElement.style.backgroundColor =
"green";
latenessElement.style.color =
"white";
}
else if (currentLateness <= 0.5) {
latenessElement.style.backgroundColor =
"orange";
latenessElement.style.color =
"black";
}
else if (currentLateness <= 2) {
latenessElement.style.backgroundColor =
"red";
latenessElement.style.color =
"white";
}
else {
latenessElement.style.backgroundColor =
"black";
latenessElement.style.color =
"white";
}
}
function departedStop() {
if (currentStopIndex >= activeRouteStops.length - 1) {
return;
}
currentStopIndex++;
currentLateness = currentLateness + 1;
renderSchedule();
updateStopInfo();
}
function generatemenetrend() {
currentStopIndex = 0;
isReversed = false;
let userInput = prompt("Hány perc múlva indul a járat?", "1");
departureOffset = parseInt(userInput);
if (isNaN(departureOffset) || departureOffset < 0) {
departureOffset = 1;
}
const now = new Date();
scheduledDepartureTime = now.getHours() * 60 + now.getMinutes() + departureOffset;
lastMinute = now.getMinutes();
let selectedRoute = document.getElementById("route-selector").value;
currentRouteNumber = selectedRoute;
activeRouteStops = JSON.parse(JSON.stringify(routes[selectedRoute]));
if (!activeRouteStops) {
alert("No route data found!");
return;
}
stopScheduledTimes = [];
for (let i = 0; i < activeRouteStops.length; i++) {
stopScheduledTimes.push(scheduledDepartureTime + activeRouteStops[i].delay);
}
renderSchedule();
// Update route and stop info
updateRouteInfo();
updateStopInfo();
}
window.onload = function() {
let savedRoute = localStorage.getItem("selectedRoute");
if (savedRoute) {
document.getElementById('selectedRouteParagraph').textContent = `Kiválasztva: ${savedRoute}`;
}
}
updateClock();
setInterval(updateClock, 1000);
</script>
</html>
<html>
<head>
<title>Passenger View</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<style>
html, body {
font-family: Helvetica;
background-image: linear-gradient(#FFA500, #FFFFFF);
background-repeat: no-repeat;
min-height: 100vh;
overflow: hidden;
}
@media (max-height: 500px) {
html, body {
overflow: auto;
}
}
p {
font-family: Arial, Helvetica, sans-serif;
color: white;
text-shadow: 2px 2px black;
-webkit-text-stroke: black 0.5px;
padding: 10px;
margin: 0;
font-size: 50px;
}
#route-number {
font-weight: bolder;
}
#route-destination {
font-weight: lighter;
}
h2 {
font-size: clamp(32px, 2.5vw, 40px);
}
#time {
font-family: Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Tahoma, sans-serif;
color: white;
text-shadow: 2px 2px black;
-webkit-text-stroke: black 0.5px;
margin-left: auto;
margin-right: 15px;
}
nav {
background-image: linear-gradient(#5eb7ff, white);
border-radius: 5px;
display: flex;
align-items: center;
gap: 15px;
padding-left: 10px;
position: relative;
border-style: outset;
}
#top-stop, #middle-stop, #bottom-stop {
margin-top: 3.75%;
margin-bottom: 3.75%;
}
</style>
</head>
<body>
<nav>
<p id="route-number">NIS</p>
<p id="route-destination">Nem szállít utasokat</p>
<h2 id="time">clock</h2>
</nav>
<main>
<p id="top-stop">Stop3</p>
<hr>
<p id="middle-stop">Stop2</p>
<hr>
<p style="font-weight: bold;" id="bottom-stop">Nem szállít utasokat</p>
</main>
</body>
<script>
// Source - https://stackoverflow.com/a/39418437
// Posted by Pranav C Balan, modified by community. See post 'Timeline' for change history
// Retrieved 2026-05-09, License - CC BY-SA 4.0
var span = document.getElementById('time');
function time() {
var d = new Date();
var s = d.getSeconds();
var m = d.getMinutes();
var h = d.getHours();
span.textContent =
("0" + h).substr(-2) + ":" + ("0" + m).substr(-2) + ":" + ("0" + s).substr(-2);
}
function updatePassengerDisplay() {
let routeNumber =
localStorage.getItem("routeNumber");
let destination =
localStorage.getItem("destination");
let topStop =
localStorage.getItem("topStop");
let middleStop =
localStorage.getItem("middleStop");
let bottomStop =
localStorage.getItem("bottomStop");
if (routeNumber) {
document.getElementById(
"route-number"
).textContent = routeNumber;
}
if (destination) {
document.getElementById(
"route-destination"
).textContent = destination;
}
document.getElementById(
"top-stop"
).textContent = topStop || "";
document.getElementById(
"middle-stop"
).textContent = middleStop || "";
document.getElementById(
"bottom-stop"
).textContent = bottomStop || "";
}
time()
updatePassengerDisplay()
window.addEventListener("storage", function(event) {
updatePassengerDisplay();
});
setInterval(time, 1000);
function checkFullscreen() {
if (!window.screenTop && !window.screenY) {
// Fullscreen - hide scrollbar
document.body.style.overflow = 'hidden';
} else {
// Not fullscreen - allow scrollbar if needed
document.body.style.overflow = 'auto';
}
}
// Check on load
checkFullscreen();
// Check on resize
window.addEventListener('resize', checkFullscreen);
// Check on fullscreen change
document.addEventListener('fullscreenchange', checkFullscreen);
document.addEventListener('webkitfullscreenchange', checkFullscreen);
document.addEventListener('mozfullscreenchange', checkFullscreen);
document.addEventListener('MSFullscreenChange', checkFullscreen);
</script>
</html>