Jump to content
MakeWebGames

All Activity

This stream auto-updates

  1. Last week
  2. Hello. Today i am here to introduce my new project. Game Engine? none, I built this from scratch, ground up. Battle of the ages has yet to have a storyline but i am working on one. Here is the screenshot of the main map area. Towns and Houses are enterable, You can cut trees to get wood. (more to come with that) You can head to a town, Get some soldiers (subject to change names) and fight other players soldiers. Do miniquests on the map. (big quests yet to be made) This game is in Alpha and is actively being working on Daily. You are welcome to join, Play abit, Move around and explore. Ideas and feedback are Very welcome. All game ideas are very subject to change to make sure things fit together as it progresses. https://battleoftheages.con-airline.com/ NOTE: A Proper Domain is on the cards but as its in alpha i dont see the need to get its own domain until either proper release or when its moves into beta. Introduced a minimap system
  3. Actually I never got around to them - was enjoying the 70's vibe of the background too much 😉
  4. did the shades work lol
  5. Only had a quick look but nice job few things i noticed * Design looks nice (login register etc) but i think there is to much empty space at bottom of page and on pc its asking me to scroll down your page (put height in css for container or body? * Would suggest you add footer to bottom of page would take up some that empty space. * Where it shows your energy bar etc to me i do not think it goes well here and is weird on my eyes personal opinion * Find all pages with crystals to bitcoin i found on index.php its not been changed yet * Add some kind of captcha system / and or user validation via email via link code etc. Other than that keep up your good work 🙂
  6. https://trenchwars.games/login.php lemme know what you think abit about me i am 32 now i was a torn player at 12 and created my first ever game at 13 in school back in the day with mccodes ny first ever 5 dollar money made then made a few for classmates then quite as a teen im now back as a hobbiest
  7. Earlier
  8. Looks to be up - albeit a simple and rather loud placeholder! Almost had me reaching for the shades 🙂
  9. So today my website went down wizwych.co.uk i got it touch with my host and gave them a yelling at only to be told they havent touched the site nor have they closed it down... So I went to Namecheap who I bought the domain name from and was shocked to find they had SUSPENDED my account because my registrant contact name didnt match my personal data.. So ive had to amend both personal and the registered account to match.. But they cant tell me when the site will be live again I just have to wait.... Registrar: Namecheap, Inc. [Tag = NAMECHEAP-INC] URL: https://www.namecheap.com Relevant dates: Registered on: 27-Apr-2012 Expiry date: 27-Apr-2028 Last updated: 28-Jun-2025 Registration status: Registered until expiry date. *** This registration has been SUSPENDED. ***
  10. Smashing out updates and changes. Done: Shops, Inventory System, Item System, Attack System and today finished up a 2D/3D map sytem. I'm having Crazy fun working away. Tho not fully released, You are more welcome to play and test the game out while i am smashing it out.
  11. Its crazy when you are working hard away how quick a game can change in 2 days 😄
  12. I'll make its own post when i am fully ready to release it, Tho i am welcome registrations, we are in beta. Here is a couple of new screenshots.
  13. I have been putting my effort into something else i enjoy alot more working on i have decided to release Con-Airline on github opensource. As much as i like the airline concept, i'm not really a plane person. https://github.com/Peterisgb/Con-Airline Enjoy. If you wish to take a peek at my current project then you can find it in my sig. Any good changes made on github, i am more than happy to throw it into the live game. Here is a pic of my current project.
  14. is that built from gl to look like torn or rebuilt from scratch using old rc engine? Whatever it is iv not registered but looked at screenshots and damn looks amazing 🙂
  15. a good site with good things https://ggsel.net/en

  16. MNG

    Reddit Avertising

    crime.fm, it isn't fully release
  17. Dayo

    Reddit Avertising

    We ran adds through reddit and it out performed meta etc by quite the margin. ill see if i can get some numbers
  18. can i see yours game?
  19. i am the big hater of : global $db, $set;
  20. gamble

    Reddit Avertising

    Never ran ads on reddit but have posted on the pbbg and webgames subreddits which have still to this day been the #1 player bringer Ads have been a pretty big dud in general but I'm probably just bad at creating attractive ads. 99.99% of my impressions were from one country and after some research were all bots. Just click farming costing me money. That was about a $300 experiment. Meta and Google ads
  21. Anyone ran ads through them? How much did you spend? Did you gain more players?
  22. yeah easy stuff just did wat a person needed who didn't understand success formulas but you made it better just somegames use boostes kike torn so i dd max anyways
  23. I didn't add any >100 formatting, but that'd be easy enough. Hell, I might even update to use a checkbox for it so users can see the direct value if they need to, or just a "yup, this is guaranteed" output. Go sick 😄
  24. That was my next step but damn you went all out that looks amazing i just did mine raw html with a jquery function but your kicked it up a whole lot 😄 whatever.html <h1>Mccodes Crime Chance Calculator</h1> <p> This was written in html css and jquery to calculate the success rates based on the users level and there will. </p> <table class='table' style='text-align: center; width: 40%;' cellspacin='1' cellpadding='1'> <tr> <th>Users Level</th> <th>Users Will</th> </tr> <tr> <td><label for='level'>Level:</label></td> <td><input type='number' min='1' value='1' max='100' id='level' required /></td> </tr> <tr> <td><label for='will'>Will:</label></td> <td><input type='number' min='1' value='100' max='99999' id='will' required /></td> </tr> <tr><td colspan='2'><input type='sumbit' id='btnclick' value='Find Percentage' /></td></tr> </table> <table class='table' style='margin-top: 10px; text-align: center; width: 40%; height: auto;'> <tr><th>Result</th></tr> <tr><td><span id='result'></span></td></tr> </table> I wrote a little bit extra that i was planning on implentnting into if people were to use on there game. so if enter over 1000 into the box it just jumps back to max level which is currently set in the jquery but i will test yours as soon as get a server running again 😞 $(document).ready(function() { $('#btnclick').click(function() { let level = $('#level').val() let will = $('#will').val() let crimeSuccess = calcChance(will, level) crimeSuccess = crimeSuccess > 100 ? 100 : crimeSuccess console.log('logged chance rate at ' + crimeSuccess) $('#result').text(crimeSuccess) }) $('#level').keyup(function() { const maxLevel = 100; let levelcheck = $('#level').val() if (levelcheck > 100) { $('#level').val(maxLevel) } }) $('#will').keyup(function() { const maxWill = 99999; let willcheck = $('#will').val() if (willcheck > 100) { $('#will').val(maxWill) } }) // Value 1 is there level and value2 is there will function calcChance(value1, value2) { if (value1 && value2) { let result = ((value2 * 0.8) / 2.5) + (value1 / 4) result = result > 100 ? 100 : result return result + '%' } } }) also i added checks to make sure not over 100% will deffo play around with yours 😛
  25. I really like the ability to visualise how the crime formulae may result; so I took your idea and added the ability to select from an existing crime, or assume the default formula ((WILL*0.8)/2.5)+(LEVEL/4) and calculate as desired. I also stripped the jQuery dependence; pure vanilla JS, woo! Fair note to our more sensitive-eyed programmers; there's no dark mode by default. Note: Written in a PHP8.4 environment. Older versions may need to change the match() call to a switch() equivalent crime-formula.php <?php declare(strict_types=1); $_GET['action'] ??= null; $_GET['id'] = array_key_exists('id', $_GET) && is_numeric($_GET['id']) && (int)$_GET['id'] > 0 ? (int)$_GET['id'] : null; class CrimeFormula { private static ?self $inst = null; private ?database $db; private ?array $settings; /** * @param database $db * @param array $settings */ public function __construct(database $db, array $settings) { $this->db = $db; $this->settings = $settings; $this->run(); } /** * @return void */ private function run(): void { $response = match ($_GET['action']) { 'get-crime-by-id' => $this->getCrimeById($_GET['id']), default => [ 'type' => 'error', 'message' => 'No action given', ], }; if ($this->isAjax()) { header('Content-type: application/json'); echo json_encode($response); exit; } if (array_key_exists('location', $response)) { header('Location: ' . $response['location']); exit; } echo $this->template('crime-select', [ '%id%' => $_GET['id'], '%menu.opts:crimes%' => $this->renderMenuOptsCrimes($_GET['id']), ]); } /** * @param int|null $id * * @return array|null */ private function getCrimeById(?int $id): ?array { if (empty($id)) { return null; } $get_crime = $this->db->query( 'SELECT * FROM crimes WHERE crimeID = ' . $id . ' LIMIT 1', ); $row = $this->db->fetch_row($get_crime); $this->db->free_result($get_crime); return $row ?? null; } /** * @return bool */ private function isAjax(): bool { return array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; } /** * @param string $fileName * @param array $replacements * * @return string|null */ private function template(string $fileName, array $replacements = []): ?string { $path = str_replace('/', DIRECTORY_SEPARATOR, __DIR__ . '/' . $fileName . '.html'); if (!file_exists($path)) { return null; } $content = file_get_contents($path); return strtr($content, $replacements); } /** * @param int|null $selected * * @return string */ private function renderMenuOptsCrimes(?int $selected = null): string { $ret = ''; $rows = $this->db->query( 'SELECT crimeID, crimeNAME, crimeBRAVE FROM crimes ORDER BY crimeBRAVE', ); while ($row = $this->db->fetch_row($rows)) { $ret .= sprintf( '<option value="%u" %s>%s [%s brave]</option>%s', $row['crimeID'], (int)$row['crimeID'] === $selected ? 'selected' : '', stripslashes(htmlspecialchars($row['crimeNAME'])), number_format((int)$row['crimeBRAVE']), PHP_EOL, ); } $this->db->free_result($rows); return $ret; } /** * @param database $db * @param array $settings * * @return self|null */ public static function getInstance(database $db, array $settings): ?self { if (self::$inst === null) { self::$inst = new self($db, $settings); } return self::$inst; } } global $db, $set; require_once __DIR__ . '/globals_nonauth.php'; $module = CrimeFormula::getInstance($db, $set); crime-select.html <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Crime Formula Tests</title> </head> <body> <div class="container" style="margin: 0 auto;"> <form id="crime-selection-form" method="get"> <div class="row py-2"> <div class="col"> <div class="form-group"> <label for="crime">Select Crime</label> <select name="crime" id="crime" class="form-control"> <option value="0" selected>--- None ---</option> %menu.opts:crimes% </select> </div> </div> </div> <div class="row py-2"> <div class="col-lg-6 col-md"> <div class="form-group"> <label for="level">Level</label> <input type="number" name="level" id="level" class="form-control" value="1" step="1"> </div> </div> <div class="col-lg-6 col-md"> <div class="form-group"> <label for="will">Will</label> <input type="number" name="will" id="will" class="form-control" value="100" step="1"> </div> </div> </div> </form> </div> <div class="container"> <span class="d-block m-1" id="crime-formula-raw"></span> <span class="d-block m-1" id="crime-formula-formatted"></span> <span class="d-block m-1" id="crime-response"></span> </div> <script> const apiCall = (path) => { return fetch(path, { headers: { 'credentials': 'same-origin', 'X-Requested-With': 'XMLHttpRequest', 'Content-Type': 'application/json' }, signal: AbortSignal.timeout(5000) }); }; const getCrime = (id, callback) => { apiCall(`crime-formula.php?action=get-crime-by-id&id=${id}`) .then(response => response.json()) .then(data => callback(data)); }; const responseElem = document.getElementById("crime-response"); const formulaRawElem = document.getElementById("crime-formula-raw"); const formulaFormattedElem = document.getElementById("crime-formula-formatted"); const updateCrimeInfo = (formula, will, level) => { let formulaFormatted = formula.replace('WILL', will).replace('LEVEL', level); formulaRawElem.innerText = formula; formulaFormattedElem.innerText = formulaFormatted; /* Dirty. Don't do this if you can avoid it. And certainly *never* trust user input with it. */ let amnt = eval(formulaFormatted); responseElem.innerText = amnt.toLocaleString(undefined, {maximumFractionDigits: 3}) + "%"; }; const getCrimeFullEvent = (e) => { e.stopPropagation(); e.preventDefault(); if ([undefined, null].includes(responseElem) || [undefined, null].includes(formulaRawElem) || [undefined, null].includes(formulaFormattedElem)) { console.error("Form element missing: crime-response/crime-formula-raw/crime-formula-formatted"); return; } let will = document.getElementById("will").value; let level = document.getElementById("level").value; let id = document.getElementById("crime").value; if ([undefined, null].includes(will)) { will = 100; } if ([undefined, null].includes(level)) { level = 1; } if ([undefined, null].includes(id)) { id = 0; } let formula = '((WILL*0.8)/2.5)+(LEVEL/4)'; if (id > 0) { getCrime(id, (data) => { if ([undefined, null].includes(data)) { console.error("Blank crime data response"); return false; } if (data.hasOwnProperty("type") && data.type !== "success") { console.error(data); return false; } updateCrimeInfo(data.crimePERCFORM, will, level); return true; }); } else { updateCrimeInfo(formula, will, level); } }; window.addEventListener("DOMContentLoaded", () => { const formElem = document.getElementById("crime-selection-form"); if ([undefined, null].includes(formElem)) { console.error("Form element missing: crime-selection-form"); return; } formElem.addEventListener("keyup", (e) => getCrimeFullEvent(e)); formElem.addEventListener("mouseup", (e) => getCrimeFullEvent(e)); }); </script> </body> </html> 2025-09-22 18-58-18.mp4
  26. Coded from pure html and jquery i only made it on jsfiddle thinking of implementing it into base of staff crimes file for easier viewing. For users who do not understand the formula for crime chance success rates. Enter users level and will and click calculate
  27. For anyone wanting to take this on, you're lookin' at CrateJS to re-wrap
  1. Load more activity
×
×
  • Create New...