
beta.lmarena.ai battle Update this specification based on the provided file content. ``` game-search.php.spec generated with claude.ai 3.7 sonnet from the search page source and an example request # game-search.php API Specification ## Overview Endpoint for searching games in the Adventure Game Studio database. ## Endpoint URL: https://www.adventuregamestudio.co.uk/site/mvc/services/game-search.php Method: POST Content-Type: application/json ## Known Request Parameters - page-number (integer): Page number for pagination - title-or-author (string): Search text for game title or author name - sort (string): Sorting method ID, options include: - "1": Title A-Z - "2": Title Z-A - "3": Author A-Z - "4": Author Z-A - "5": Newest Releases (default) - "6": Oldest Releases - "7": Highest Panel Rating - "8": Lowest Panel Rating - "9": Highest Player Rating - "10": Lowest Player Rating - "11": AGS Awards Won - "12": Most Popular Ever - "13": Most Popular This Month - "14": Newest Comments - "15": Newest Picks of the Month - "16": Newest Panel Rating - "17": Oldest Panel Rating ## Filter Parameters The search filter fields are dynamically loaded from `search-filter-content.php` into the desktop and mobile filter containers. These fields are likely to include: - Genre filters - Platform compatibility filters - Release year filters - Language filters - Rating filters - Special category filters (awards, featured games, etc.) A comprehensive documentation of these fields would require examination of the `search-filter-content.php` file, which is not included in the provided source. The API likely accepts these filter parameters in addition to the ones documented above. ## Response Format JSON object containing: - game_results (array): List of game objects with properties: - id (integer): Unique game identifier - name (string): Game title - author (string): Game creator - filename (string): Path to thumbnail image - release_date (string): ISO format date/time of release - panel_rating (integer/float): Editorial rating - player_rating_avg (float): Average user rating (-1 if none) - awards_winner (mixed): Award winner information - awards_nominee (mixed): Award nomination information - downloads_total (integer): Total download count - downloads_this_month (integer): Downloads in current month - panel_date (string): Date of panel rating - picks_month (mixed): Featured month information - total_results (integer): Total number of games matching criteria - sort_type (integer): Sort method used - filter_type (integer): Filter method used - play_in_browser (integer): Browser playability flag (0/1) ## Sample Request { "page-number": "1", "title-or-author": "", "sort": "5" } ## Sample Response { "game_results": [ { "id": 2858, "name": "Another Heaven", "author": "Akril15", "filename": "/site/assets/img/games/thumbs/2858_1.png", "release_date": "2025-04-20 19:54:59", "panel_rating": 0, "player_rating_avg": -1, "awards_winner": null, "awards_nominee": null, "downloads_total": 36, "downloads_this_month": 36, "panel_date": null, "picks_month": null, "total_results": 2485, "sort_type": 5, "filter_type": 0, "play_in_browser": 0 } ] } ## Notes - For complete documentation of filter parameters, the contents of search-filter-content.php would need to be examined - The application's JavaScript (particularly search.min.js) likely handles the collection of all form fields and filters before submitting to the API - Network monitoring during form interactions would reveal the complete structure of requests with filters applied ``` ``` search-filter-content.php <div class="accordion " id="filter-list-rating"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-rating" aria-expanded="true">Rating </button> </h2> <div id="filter-content-rating" class="accordion-collapse collapsed show" data-bs-parent="#filter-list-rating"> <div class="accordion-body"> <strong>Panel Rating</strong> <div class="form-check"> <label class="form-check-label" for="panel-5-stars"> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> </label> <input class="form-check-input" type="checkbox" value="5" id="panel-5-stars" name="panel-5-stars"> </div> <div class="form-check"> <label class="form-check-label" for="panel-4-stars"> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="4" id="panel-4-stars" name="panel-4-stars"> </div> <div class="form-check"> <label class="form-check-label" for="panel-3-stars"> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="3" id="panel-3-stars" name="panel-3-stars"> </div> <div class="form-check"> <label class="form-check-label" for="panel-2-stars"> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="2" id="panel-2-stars" name="panel-2-stars"> </div> <div class="form-check"> <label class="form-check-label" for="panel-1-star"> <span class="fas fa-mug-hot medium-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="1" id="panel-1-star" name="panel-1-star"> </div> <div class="form-check"> <label class="form-check-label" for="panel-no-rating">No panel rating</label> <input class="form-check-input" type="checkbox" value="0" id="panel-no-rating" name="panel-no-rating"> </div> <strong>Player Rating</strong> <div class="form-check"> <input class="form-check-input" type="checkbox" value="5" id="desktop-player-5-stars" name="player-5-stars"> <label class="form-check-label" for="desktop-player-5-stars"> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> </label> </div> <div class="form-check"> <label class="form-check-label" for="player-4-stars"> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="4" id="player-4-stars" name="player-4-stars"> </div> <div class="form-check"> <label class="form-check-label" for="player-3-stars"> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="3" id="player-3-stars" name="player-3-stars"> </div> <div class="form-check"> <label class="form-check-label" for="player-2-stars"> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="2" id="player-2-stars" name="player-2-stars"> </div> <div class="form-check"> <label class="form-check-label" for="player-1-star"> <span class="fas fa-mug-hot gold"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> <span class="fas fa-mug-hot light-blue"></span> </label> <input class="form-check-input" type="checkbox" value="1" id="player-1-star" name="player-1-star"> </div> <div class="form-check"> <label class="form-check-label" for="player-not-enough-votes">Not enough player votes</label> <input class="form-check-input" type="checkbox" value="-1" id="player-not-enough-votes" name="player-not-enough-votes"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-awards"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-awards" aria-expanded="true">AGS Awards </button> </h2> <div id="filter-content-awards" class="accordion-collapse collapsed show" data-bs-parent="#filter-list-awards"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="ags-award-winners">AGS Awards Winners</label> <input class="form-check-input" type="checkbox" value="1" id="ags-award-winners" name="ags-award-winners"> </div> <div class="form-check"> <label class="form-check-label" for="ags-award-nominees">AGS Award Nominees</label> <input class="form-check-input" type="checkbox" value="1" id="ags-award-nominees" name="ags-award-nominees"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-game-length"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-game-length" aria-expanded="true">Game Length </button> </h2> <div id="filter-content-game-length" class="accordion-collapse collapse show" data-bs-parent="#filter-list-game-length"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="length-full-length-games">Full Length Games</label> <input class="form-check-input" type="checkbox" value="1" id="length-full-length-games" name="length-full-length-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-medium-length-games">Medium Length Games</label> <input class="form-check-input" type="checkbox" value="6" id="length-medium-length-games" name="length-medium-length-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-short-games">Short Games</label> <input class="form-check-input" type="checkbox" value="0" id="length-short-games" name="length-short-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-non-adventure-games">Non-Adventure Games</label> <input class="form-check-input" type="checkbox" value="3" id="length-non-adventure-games" name="length-non-adventure-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-training-games">Training Games</label> <input class="form-check-input" type="checkbox" value="7" id="length-training-games" name="length-training-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-joke-games">Joke Games</label> <input class="form-check-input" type="checkbox" value="4" id="length-joke-games" name="length-joke-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-demo-games">Demo Games</label> <input class="form-check-input" type="checkbox" value="5" id="length-demo-games" name="length-demo-games"> </div> <div class="form-check"> <label class="form-check-label" for="length-length-not-set"><em>(Not Set)</em></label> <input class="form-check-input" type="checkbox" value="15" id="length-length-not-set" name="length-length-not-set"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-release-type"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-release-type" aria-expanded="true">Release Type </button> </h2> <div id="filter-content-release-type" class="accordion-collapse collapse show" data-bs-parent="#filter-list-release-type"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="release-commercial">Commercial</label> <input class="form-check-input" type="checkbox" value="1" id="release-commercial" name="release-commercial"> </div> <div class="form-check"> <label class="form-check-label" for="release-freeware">Freeware</label> <input class="form-check-input" type="checkbox" value="0" id="release-freeware" name="release-freeware"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-os"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-os">Operating System </button> </h2> <div id="filter-content-os" class="accordion-collapse collapse" data-bs-parent="#filter-list-os"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="os-windows">Windows</label> <input class="form-check-input" type="checkbox" value="1" id="os-windows" name="os-windows"> </div> <div class="form-check"> <label class="form-check-label" for="os-linux">Linux</label> <input class="form-check-input" type="checkbox" value="2" id="os-linux" name="os-linux"> </div> <div class="form-check"> <label class="form-check-label" for="os-macos">Mac OS</label> <input class="form-check-input" type="checkbox" value="3" id="os-macos" name="os-macos"> </div> <div class="form-check"> <label class="form-check-label" for="os-android">Android</label> <input class="form-check-input" type="checkbox" value="4" id="os-android" name="os-android"> </div> <div class="form-check"> <label class="form-check-label" for="os-ios">iOS</label> <input class="form-check-input" type="checkbox" value="4" id="os-ios" name="os-ios"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-setting"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-setting"> Setting </button> </h2> <div id="filter-content-setting" class="accordion-collapse collapse" data-bs-parent="#filter-list-setting"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="setting-contemporary">Contemporary</label> <input class="form-check-input" type="checkbox" value="1" id="setting-contemporary" name="setting-contemporary"> </div> <div class="form-check"> <label class="form-check-label" for="setting-historical">Historical</label> <input class="form-check-input" type="checkbox" value="2" id="setting-historical" name="setting-historical"> </div> <div class="form-check"> <label class="form-check-label" for="setting-fantasy">Fantasy</label> <input class="form-check-input" type="checkbox" value="3" id="setting-fantasy" name="setting-fantasy"> </div> <div class="form-check"> <label class="form-check-label" for="setting-sci-fi">Sci-Fi</label> <input class="form-check-input" type="checkbox" value="4" id="setting-sci-fi" name="setting-sci-fi"> </div> <div class="form-check"> <label class="form-check-label" for="desktop-settings-other">Other</label> <input class="form-check-input" type="checkbox" value="5" id="desktop-settings-other" name="setting-other"> </div> <div class="form-check"> <label class="form-check-label" for="desktop-setting-not-set"><em>(Not Set)</em></label> <input class="form-check-input" type="checkbox" value="0" id="desktop-setting-not-set" name="setting-not-set"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-genre"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-genre">Genre </button> </h2> <div id="filter-content-genre" class="accordion-collapse collapse" data-bs-parent="#filter-list-genre"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="genre-comedy">Comedy</label> <input class="form-check-input" type="checkbox" value="1" id="genre-comedy" name="genre-comedy"> </div> <div class="form-check"> <label class="form-check-label" for="genre-drama">Drama</label> <input class="form-check-input" type="checkbox" value="2" id="genre-drama" name="genre-drama"> </div> <div class="form-check"> <label class="form-check-label" for="genre-horror">Horror</label> <input class="form-check-input" type="checkbox" value="3" id="genre-horror" name="genre-horror"> </div> <div class="form-check"> <label class="form-check-label" for="genre-investigative">Investigative</label> <input class="form-check-input" type="checkbox" value="4" id="genre-investigative" name="genre-investigative"> </div> <div class="form-check"> <label class="form-check-label" for="genre-other">Other</label> <input class="form-check-input" type="checkbox" value="5" id="genre-other" name="genre-other"> </div> <div class="form-check"> <label class="form-check-label" for="genre-not-set"><em>(Not Set)</em></label> <input class="form-check-input" type="checkbox" value="0" id="genre-not-set" name="genre-not-set"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-story-type"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-story-type">Story Type </button> </h2> <div id="filter-content-story-type" class="accordion-collapse collapse" data-bs-parent="#filter-list-story-type"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="story-type-original">Original</label> <input class="form-check-input" type="checkbox" value="1" id="story-type-original" name="story-type-original"> </div> <div class="form-check"> <label class="form-check-label" for="story-type-parody">Parody</label> <input class="form-check-input" type="checkbox" value="2" id="story-type-parody" name="story-type-parody"> </div> <div class="form-check"> <label class="form-check-label" for="story-type-remake">Remake</label> <input class="form-check-input" type="checkbox" value="3" id="story-type-remake" name="story-type-remake"> </div> <div class="form-check"> <label class="form-check-label" for="story-type-fan-game">Fan Game</label> <input class="form-check-input" type="checkbox" value="4" id="story-type-fan-game" name="story-type-fan-game"> </div> <div class="form-check"> <label class="form-check-label" for="story-type-other">Other</label> <input class="form-check-input" type="checkbox" value="5" id="story-type-other" name="story-type-other"> </div> <div class="form-check"> <label class="form-check-label" for="story-type-not-set">(Not Set)</label> <input class="form-check-input" type="checkbox" value="0" id="story-type-not-set" name="story-type-not-set"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-language"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-language">Language </button> </h2> <div id="filter-content-language" class="accordion-collapse collapse" data-bs-parent="#filter-list-language"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="language-czech"> Czech </label> <input class="form-check-input" type="checkbox" value="30" id="language-czech" name="language-czech"> </div> <div class="form-check"> <label class="form-check-label" for="language-dutch"> Dutch </label> <input class="form-check-input" type="checkbox" value="35" id="language-dutch" name="language-dutch"> </div> <div class="form-check"> <label class="form-check-label" for="language-english"> English </label> <input class="form-check-input" type="checkbox" value="36" id="language-english" name="language-english"> </div> <div class="form-check"> <label class="form-check-label" for="language-espanol"> Espanol </label> <input class="form-check-input" type="checkbox" value="38" id="language-espanol" name="language-espanol"> </div> <div class="form-check"> <label class="form-check-label" for="language-finnish"> Finnish </label> <input class="form-check-input" type="checkbox" value="41" id="language-finnish" name="language-finnish"> </div> <div class="form-check"> <label class="form-check-label" for="language-french"> French </label> <input class="form-check-input" type="checkbox" value="43" id="language-french" name="language-french"> </div> <div class="form-check"> <label class="form-check-label" for="language-georgian"> Georgian </label> <input class="form-check-input" type="checkbox" value="52" id="language-georgian" name="language-georgian"> </div> <div class="form-check"> <label class="form-check-label" for="language-german"> German </label> <input class="form-check-input" type="checkbox" value="53" id="language-german" name="language-german"> </div> <div class="form-check"> <label class="form-check-label" for="language-greek"> Greek </label> <input class="form-check-input" type="checkbox" value="55" id="language-greek" name="language-greek"> </div> <div class="form-check"> <label class="form-check-label" for="language-hakka-chinese"> Hakka-Chinese </label> <input class="form-check-input" type="checkbox" value="59" id="language-hakka-chinese" name="language-hakka-chinese"> </div> <div class="form-check"> <label class="form-check-label" for="language-hebrew"> Hebrew </label> <input class="form-check-input" type="checkbox" value="61" id="language-hebrew" name="language-hebrew"> </div> <div class="form-check"> <label class="form-check-label" for="language-hungarian"> Hungarian </label> <input class="form-check-input" type="checkbox" value="64" id="language-hungarian" name="language-hungarian"> </div> <div class="form-check"> <label class="form-check-label" for="language-icelandic"> Icelandic </label> <input class="form-check-input" type="checkbox" value="66" id="language-icelandic" name="language-icelandic"> </div> <div class="form-check"> <label class="form-check-label" for="language-italian"> Italian </label> <input class="form-check-input" type="checkbox" value="71" id="language-italian" name="language-italian"> </div> <div class="form-check"> <label class="form-check-label" for="language-japanese"> Japanese </label> <input class="form-check-input" type="checkbox" value="73" id="language-japanese" name="language-japanese"> </div> <div class="form-check"> <label class="form-check-label" for="language-korean"> Korean </label> <input class="form-check-input" type="checkbox" value="83" id="language-korean" name="language-korean"> </div> <div class="form-check"> <label class="form-check-label" for="language-norwegian"> Norwegian </label> <input class="form-check-input" type="checkbox" value="115" id="language-norwegian" name="language-norwegian"> </div> <div class="form-check"> <label class="form-check-label" for="language-polish"> Polish </label> <input class="form-check-input" type="checkbox" value="123" id="language-polish" name="language-polish"> </div> <div class="form-check"> <label class="form-check-label" for="language-portuguese"> Portuguese </label> <input class="form-check-input" type="checkbox" value="125" id="language-portuguese" name="language-portuguese"> </div> <div class="form-check"> <label class="form-check-label" for="language-romanian"> Romanian </label> <input class="form-check-input" type="checkbox" value="131" id="language-romanian" name="language-romanian"> </div> <div class="form-check"> <label class="form-check-label" for="language-russian"> Russian </label> <input class="form-check-input" type="checkbox" value="132" id="language-russian" name="language-russian"> </div> <div class="form-check"> <label class="form-check-label" for="language-slovak"> Slovak </label> <input class="form-check-input" type="checkbox" value="140" id="language-slovak" name="language-slovak"> </div> <div class="form-check"> <label class="form-check-label" for="language-spanish"> Spanish </label> <input class="form-check-input" type="checkbox" value="143" id="language-spanish" name="language-spanish"> </div> <div class="form-check"> <label class="form-check-label" for="language-swedish"> Swedish </label> <input class="form-check-input" type="checkbox" value="148" id="language-swedish" name="language-swedish"> </div> <div class="form-check"> <label class="form-check-label" for="language-turkish"> Turkish </label> <input class="form-check-input" type="checkbox" value="164" id="language-turkish" name="language-turkish"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-year"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-year">Year </button> </h2> <div id="filter-content-year" class="accordion-collapse collapse" data-bs-parent="#filter-list-year"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="year-2025">2025</label> <input class="form-check-input" type="checkbox" value="1" id="year-2025" name="year-2025"> </div> <div class="form-check"> <label class="form-check-label" for="year-2024">2024</label> <input class="form-check-input" type="checkbox" value="1" id="year-2024" name="year-2024"> </div> <div class="form-check"> <label class="form-check-label" for="year-2023">2023</label> <input class="form-check-input" type="checkbox" value="1" id="year-2023" name="year-2023"> </div> <div class="form-check"> <label class="form-check-label" for="year-2022">2022</label> <input class="form-check-input" type="checkbox" value="1" id="year-2022" name="year-2022"> </div> <div class="form-check"> <label class="form-check-label" for="year-2021">2021</label> <input class="form-check-input" type="checkbox" value="1" id="year-2021" name="year-2021"> </div> <div class="form-check"> <label class="form-check-label" for="year-2020">2020</label> <input class="form-check-input" type="checkbox" value="1" id="year-2020" name="year-2020"> </div> <div class="form-check"> <label class="form-check-label" for="year-2019">2019</label> <input class="form-check-input" type="checkbox" value="1" id="year-2019" name="year-2019"> </div> <div class="form-check"> <label class="form-check-label" for="year-2018">2018</label> <input class="form-check-input" type="checkbox" value="1" id="year-2018" name="year-2018"> </div> <div class="form-check"> <label class="form-check-label" for="year-2017">2017</label> <input class="form-check-input" type="checkbox" value="1" id="year-2017" name="year-2017"> </div> <div class="form-check"> <label class="form-check-label" for="year-2016">2016</label> <input class="form-check-input" type="checkbox" value="1" id="year-2016" name="year-2016"> </div> <div class="form-check"> <label class="form-check-label" for="year-2015">2015</label> <input class="form-check-input" type="checkbox" value="1" id="year-2015" name="year-2015"> </div> <div class="form-check"> <label class="form-check-label" for="year-older-2014">2014 and older</label> <input class="form-check-input" type="checkbox" value="1" id="year-older-2014" name="year-older-than-2015"> </div> </div> </div> </div> </div> <div class="accordion" id="filter-list-tags"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-tags">Tags </button> </h2> <div id="filter-content-tags" class="accordion-collapse collapse" data-bs-parent="#filter-list-tags"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="tag-20">90s</label> <input class="form-check-input" type="checkbox" value="1" id="tag-20" name="tag-20"> </div> <div class="form-check"> <label class="form-check-label" for="tag-6">Adventure</label> <input class="form-check-input" type="checkbox" value="1" id="tag-6" name="tag-6"> </div> <div class="form-check"> <label class="form-check-label" for="tag-27">casual</label> <input class="form-check-input" type="checkbox" value="1" id="tag-27" name="tag-27"> </div> <div class="form-check"> <label class="form-check-label" for="tag-9">Child-friendly</label> <input class="form-check-input" type="checkbox" value="1" id="tag-9" name="tag-9"> </div> <div class="form-check"> <label class="form-check-label" for="tag-25">Choices Matter</label> <input class="form-check-input" type="checkbox" value="1" id="tag-25" name="tag-25"> </div> <div class="form-check"> <label class="form-check-label" for="tag-23">Chuck</label> <input class="form-check-input" type="checkbox" value="1" id="tag-23" name="tag-23"> </div> <div class="form-check"> <label class="form-check-label" for="tag-15">Dystopian</label> <input class="form-check-input" type="checkbox" value="1" id="tag-15" name="tag-15"> </div> <div class="form-check"> <label class="form-check-label" for="tag-4">Educational</label> <input class="form-check-input" type="checkbox" value="1" id="tag-4" name="tag-4"> </div> <div class="form-check"> <label class="form-check-label" for="tag-13">Escape the room</label> <input class="form-check-input" type="checkbox" value="1" id="tag-13" name="tag-13"> </div> <div class="form-check"> <label class="form-check-label" for="tag-2">Fantasy</label> <input class="form-check-input" type="checkbox" value="1" id="tag-2" name="tag-2"> </div> <div class="form-check"> <label class="form-check-label" for="tag-14">Gameboy</label> <input class="form-check-input" type="checkbox" value="1" id="tag-14" name="tag-14"> </div> <div class="form-check"> <label class="form-check-label" for="tag-11">Hidden object</label> <input class="form-check-input" type="checkbox" value="1" id="tag-11" name="tag-11"> </div> <div class="form-check"> <label class="form-check-label" for="tag-16">History</label> <input class="form-check-input" type="checkbox" value="1" id="tag-16" name="tag-16"> </div> <div class="form-check"> <label class="form-check-label" for="tag-7">Hybrid</label> <input class="form-check-input" type="checkbox" value="1" id="tag-7" name="tag-7"> </div> <div class="form-check"> <label class="form-check-label" for="tag-24">Maniac Mansion</label> <input class="form-check-input" type="checkbox" value="1" id="tag-24" name="tag-24"> </div> <div class="form-check"> <label class="form-check-label" for="tag-3">Medieval</label> <input class="form-check-input" type="checkbox" value="1" id="tag-3" name="tag-3"> </div> <div class="form-check"> <label class="form-check-label" for="tag-17">Museum</label> <input class="form-check-input" type="checkbox" value="1" id="tag-17" name="tag-17"> </div> <div class="form-check"> <label class="form-check-label" for="tag-1">Non-Adventure</label> <input class="form-check-input" type="checkbox" value="1" id="tag-1" name="tag-1"> </div> <div class="form-check"> <label class="form-check-label" for="tag-8">Quiz</label> <input class="form-check-input" type="checkbox" value="1" id="tag-8" name="tag-8"> </div> <div class="form-check"> <label class="form-check-label" for="tag-18">Retro</label> <input class="form-check-input" type="checkbox" value="1" id="tag-18" name="tag-18"> </div> <div class="form-check"> <label class="form-check-label" for="tag-5">RPG</label> <input class="form-check-input" type="checkbox" value="1" id="tag-5" name="tag-5"> </div> <div class="form-check"> <label class="form-check-label" for="tag-22">simulation</label> <input class="form-check-input" type="checkbox" value="1" id="tag-22" name="tag-22"> </div> <div class="form-check"> <label class="form-check-label" for="tag-26">Wild West</label> <input class="form-check-input" type="checkbox" value="1" id="tag-26" name="tag-26"> </div> <div class="form-check"> <label class="form-check-label" for="tag-21">Word Game</label> <input class="form-check-input" type="checkbox" value="1" id="tag-21" name="tag-21"> </div> </div> </div> </div> </div> <div class="accordion " id="filter-list-other"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-content-other">Other </button> </h2> <div id="filter-content-other" class="accordion-collapse collapse" data-bs-parent="#filter-list-other"> <div class="accordion-body"> <div class="form-check"> <label class="form-check-label" for="other-play-in-browser">Play in Browser</label> <input class="form-check-input" type="checkbox" value="1" id="other-play-in-browser" name="other-play-in-browser"> </div> <div class="form-check"> <label class="form-check-label" for="other-mags">MAGS</label> <input class="form-check-input" type="checkbox" value="1" id="other-mags" name="other-mags"> </div> <div class="form-check"> <label class="form-check-label" for="other-pick-of-the-month">Pick of the Month</label> <input class="form-check-input" type="checkbox" value="1" id="other-pick-of-the-month" name="other-pick-of-the-month"> </div> <div class="form-check"> <label class="form-check-label" for="other-voice-acting">Voice Acting</label> <input class="form-check-input" type="checkbox" value="1" id="other-voice-acting" name="other-voice-acting"> </div> <div class="form-check"> <label class="form-check-label" for="other-filthy">The Most Filthy games</label> <input class="form-check-input" type="checkbox" value="1" id="other-filthy" name="other-filthy"> </div> <strong>Marked as Broken or Missing</strong> <div class="form-check"> <label class="form-check-label" for="other-broken-images">Broken Images</label> <input class="form-check-input" type="checkbox" value="1" id="other-broken-images" name="other-broken-images"> </div> <div class="form-check"> <label class="form-check-label" for="other-broken-videos">Broken Videos</label> <input class="form-check-input" type="checkbox" value="1" id="other-broken-videos" name="other-broken-videos"> </div> <div class="form-check"> <label class="form-check-label" for="other-broken-downloads">Broken Downloads</label> <input class="form-check-input" type="checkbox" value="1" id="other-broken-downloads" name="other-broken-downloads"> </div> <div class="form-check"> <label class="form-check-label" for="other-missing-downloads">Missing Downloads</label> <input class="form-check-input" type="checkbox" value="1" id="other-missing-downloads" name="other-missing-downloads"> </div> </div> </div> </div> </div> ``` gemini-2.0-flash-001 ``` # game-search.php API Specification ## Overview Endpoint for searching games in the Adventure Game Studio database. ## Endpoint URL: https://www.adventuregamestudio.co.uk/site/mvc/services/game-search.php Method: POST Content-Type: application/json ## Known Request Parameters - page-number (integer): Page number for pagination - title-or-author (string): Search text for game title or author name - sort (string): Sorting method ID, options include: - "1": Title A-Z - "2": Title Z-A - "3": Author A-Z - "4": Author Z-A - "5": Newest Releases (default) - "6": Oldest Releases - "7": Highest Panel Rating - "8": Lowest Panel Rating - "9": Highest Player Rating - "10": Lowest Player Rating - "11": AGS Awards Won - "12": Most Popular Ever - "13": Most Popular This Month - "14": Newest Comments - "15": Newest Picks of the Month - "16": Newest Panel Rating - "17": Oldest Panel Rating ## Filter Parameters The search filter fields are dynamically loaded from `search-filter-content.php` into the desktop and mobile filter containers. The following filter parameters are supported, and are sent as part of the JSON payload. Each filter category corresponds to an accordion section in `search-filter-content.php`. Boolean filters are represented by the presence of a key, the value of which is ignored. - **Rating Filters:** - `panel-5-stars` (boolean): Filter for games with a 5-star panel rating. - `panel-4-stars` (boolean): Filter for games with a 4-star panel rating. - `panel-3-stars` (boolean): Filter for games with a 3-star panel rating. - `panel-2-stars` (boolean): Filter for games with a 2-star panel rating. - `panel-1-star` (boolean): Filter for games with a 1-star panel rating. - `panel-no-rating` (boolean): Filter for games with no panel rating. - `player-5-stars` (boolean): Filter for games with a 5-star player rating. - `player-4-stars` (boolean): Filter for games with a 4-star player rating. - `player-3-stars` (boolean): Filter for games with a 3-star player rating. - `player-2-stars` (boolean): Filter for games with a 2-star player rating. - `player-1-star` (boolean): Filter for games with a 1-star player rating. - `player-not-enough-votes` (boolean): Filter for games with not enough player votes. - **AGS Awards Filters:** - `ags-award-winners` (boolean): Filter for games that are AGS Award winners. - `ags-award-nominees` (boolean): Filter for games that are AGS Award nominees. - **Game Length Filters:** - `length-full-length-games` (boolean): Filter for full length games. - `length-medium-length-games` (boolean): Filter for medium length games. - `length-short-games` (boolean): Filter for short games. - `length-non-adventure-games` (boolean): Filter for non-adventure games. - `length-training-games` (boolean): Filter for training games. - `length-joke-games` (boolean): Filter for joke games. - `length-demo-games` (boolean): Filter for demo games. - `length-length-not-set` (boolean): Filter for games where the length is not set. - **Release Type Filters:** - `release-commercial` (boolean): Filter for commercial games. - `release-freeware` (boolean): Filter for freeware games. - **Operating System Filters:** - `os-windows` (boolean): Filter for Windows games. - `os-linux` (boolean): Filter for Linux games. - `os-macos` (boolean): Filter for Mac OS games. - `os-android` (boolean): Filter for Android games. - `os-ios` (boolean): Filter for iOS games. - **Setting Filters:** - `setting-contemporary` (boolean): Filter for games with a contemporary setting. - `setting-historical` (boolean): Filter for games with a historical setting. - `setting-fantasy` (boolean): Filter for games with a fantasy setting. - `setting-sci-fi` (boolean): Filter for games with a sci-fi setting. - `setting-other` (boolean): Filter for games with other settings. - `setting-not-set` (boolean): Filter for games where the setting is not set. - **Genre Filters:** - `genre-comedy` (boolean): Filter for comedy games. - `genre-drama` (boolean): Filter for drama games. - `genre-horror` (boolean): Filter for horror games. - `genre-investigative` (boolean): Filter for investigative games. - `genre-other` (boolean): Filter for other genre games. - `genre-not-set` (boolean): Filter for games where the genre is not set. - **Story Type Filters:** - `story-type-original` (boolean): Filter for original story type games. - `story-type-parody` (boolean): Filter for parody story type games. - `story-type-remake` (boolean): Filter for remake story type games. - `story-type-fan-game` (boolean): Filter for fan game story type games. - `story-type-other` (boolean): Filter for other story type games. - `story-type-not-set` (boolean): Filter for games where the story type is not set. - **Language Filters:** - `language-czech` (boolean): Filter for Czech language games. - `language-dutch` (boolean): Filter for Dutch language games. - `language-english` (boolean): Filter for English language games. - `language-espanol` (boolean): Filter for Spanish language games (Espanol). - `language-finnish` (boolean): Filter for Finnish language games. - `language-french` (boolean): Filter for French language games. - `language-georgian` (boolean): Filter for Georgian language games. - `language-german` (boolean): Filter for German language games. - `language-greek` (boolean): Filter for Greek language games. - `language-hakka-chinese` (boolean): Filter for Hakka-Chinese language games. - `language-hebrew` (boolean): Filter for Hebrew language games. - `language-hungarian` (boolean): Filter for Hungarian language games. - `language-icelandic` (boolean): Filter for Icelandic language games. - `language-italian` (boolean): Filter for Italian language games. - `language-japanese` (boolean): Filter for Japanese language games. - `language-korean` (boolean): Filter for Korean language games. - `language-norwegian` (boolean): Filter for Norwegian language games. - `language-polish` (boolean): Filter for Polish language games. - `language-portuguese` (boolean): Filter for Portuguese language games. - `language-romanian` (boolean): Filter for Romanian language games. - `language-russian` (boolean): Filter for Russian language games. - `language-slovak` (boolean): Filter for Slovak language games. - `language-spanish` (boolean): Filter for Spanish language games. - `language-swedish` (boolean): Filter for Swedish language games. - `language-turkish` (boolean): Filter for Turkish language games. - **Year Filters:** - `year-2025` (boolean): Filter for games released in 2025. - `year-2024` (boolean): Filter for games released in 2024. - `year-2023` (boolean): Filter for games released in 2023. - `year-2022` (boolean): Filter for games released in 2022. - `year-2021` (boolean): Filter for games released in 2021. - `year-2020` (boolean): Filter for games released in 2020. - `year-2019` (boolean): Filter for games released in 2019. - `year-2018` (boolean): Filter for games released in 2018. - `year-2017` (boolean): Filter for games released in 2017. - `year-2016` (boolean): Filter for games released in 2016. - `year-2015` (boolean): Filter for games released in 2015. - `year-older-than-2015` (boolean): Filter for games released in 2014 and older. The HTML uses id `year-older-2014` and name `year-older-than-2015`, this documentation assumes the name is correct. - **Tag Filters:** - `tag-20` (boolean): Filter for games tagged as "90s". - `tag-6` (boolean): Filter for games tagged as "Adventure". - `tag-27` (boolean): Filter for games tagged as "casual". - `tag-9` (boolean): Filter for games tagged as "Child-friendly". - `tag-25` (boolean): Filter for games tagged as "Choices Matter". - `tag-23` (boolean): Filter for games tagged as "Chuck". - `tag-15` (boolean): Filter for games tagged as "Dystopian". - `tag-4` (boolean): Filter for games tagged as "Educational". - `tag-13` (boolean): Filter for games tagged as "Escape the room". - `tag-2` (boolean): Filter for games tagged as "Fantasy". - `tag-14` (boolean): Filter for games tagged as "Gameboy". - `tag-11` (boolean): Filter for games tagged as "Hidden object". - `tag-16` (boolean): Filter for games tagged as "History". - `tag-7` (boolean): Filter for games tagged as "Hybrid". - `tag-24` (boolean): Filter for games tagged as "Maniac Mansion". - `tag-3` (boolean): Filter for games tagged as "Medieval". - `tag-17` (boolean): Filter for games tagged as "Museum". - `tag-1` (boolean): Filter for games tagged as "Non-Adventure". - `tag-8` (boolean): Filter for games tagged as "Quiz". - `tag-18` (boolean): Filter for games tagged as "Retro". - `tag-5` (boolean): Filter for games tagged as "RPG". - `tag-22` (boolean): Filter for games tagged as "simulation". - `tag-26` (boolean): Filter for games tagged as "Wild West". - `tag-21` (boolean): Filter for games tagged as "Word Game". - **Other Filters:** - `other-play-in-browser` (boolean): Filter for games playable in browser. - `other-mags` (boolean): Filter for MAGS games. - `other-pick-of-the-month` (boolean): Filter for games that are Pick of the Month. - `other-voice-acting` (boolean): Filter for games with voice acting. - `other-filthy` (boolean): Filter for "The Most Filthy" games. - `other-broken-images` (boolean): Filter for games with broken images. - `other-broken-videos` (boolean): Filter for games with broken videos. - `other-broken-downloads` (boolean): Filter for games with broken downloads. - `other-missing-downloads` (boolean): Filter for games with missing downloads. ## Response Format JSON object containing: - game_results (array): List of game objects with properties: - id (integer): Unique game identifier - name (string): Game title - author (string): Game creator - filename (string): Path to thumbnail image - release_date (string): ISO format date/time of release - panel_rating (integer/float): Editorial rating - player_rating_avg (float): Average user rating (-1 if none) - awards_winner (mixed): Award winner information - awards_nominee (mixed): Award nomination information - downloads_total (integer): Total download count - downloads_this_month (integer): Downloads in current month - panel_date (string): Date of panel rating - picks_month (mixed): Featured month information - total_results (integer): Total number of games matching criteria - sort_type (integer): Sort method used - filter_type (integer): Filter method used - play_in_browser (integer): Browser playability flag (0/1) ## Sample Request ```json { "page-number": "1", "title-or-author": "", "sort": "5", "genre-comedy": true, "os-windows": true } ``` ## Sample Response ```json { "game_results": [ { "id": 2858, "name": "Another Heaven", "author": "Akril15", "filename": "/site/assets/img/games/thumbs/2858_1.png", "release_date": "2025-04-20 19:54:59", "panel_rating": 0, "player_rating_avg": -1, "awards_winner": null, "awards_nominee": null, "downloads_total": 36, "downloads_this_month": 36, "panel_date": null, "picks_month": null, "total_results": 2485, "sort_type": 5, "filter_type": 0, "play_in_browser": 0 } ] } ``` ## Notes - The filter parameters are boolean, the presence of the key indicates that the filter is active. - The application's JavaScript (particularly search.min.js) likely handles the collection of all form fields and filters before submitting to the API. - Network monitoring during form interactions would reveal the complete structure of requests with filters applied. - The HTML uses id `year-older-2014` and name `year-older-than-2015` for the "2014 and older" filter, this documentation assumes the name (`year-older-than-2015`) is the correct parameter name. ``` gemini-2.5-flash-preview-04-17 Okay, I will update the `game-search.php.spec` specification using the information from the provided `search-filter-content.php` file. The key information to extract from `search-filter-content.php` is the `name` attribute of each `<input type="checkbox">` element, and its corresponding `value`. These `name`/`value` pairs represent the filter parameters sent to the `game-search.php` endpoint when the checkbox is selected. Here is the updated specification: ``` game-search.php.spec generated with claude.ai 3.7 sonnet from the search page source and an example request Updated based on content from search-filter-content.php # game-search.php API Specification ## Overview Endpoint for searching games in the Adventure Game Studio database. ## Endpoint URL: https://www.adventuregamestudio.co.uk/site/mvc/services/game-search.php Method: POST Content-Type: application/json ## Known Request Parameters - page-number (integer string): Page number for pagination (e.g., "1", "2") - title-or-author (string): Search text for game title or author name. Can be empty. - sort (string): Sorting method ID, options include: - "1": Title A-Z - "2": Title Z-A - "3": Author A-Z - "4": Author Z-A - "5": Newest Releases (default) - "6": Oldest Releases - "7": Highest Panel Rating - "8": Lowest Panel Rating - "9": Highest Player Rating - "10": Lowest Player Rating - "11": AGS Awards Won - "12": Most Popular Ever - "13": Most Popular This Month - "14": Newest Comments - "15": Newest Picks of the Month - "16": Newest Panel Rating - "17": Oldest Panel Rating ## Filter Parameters Filter parameters are included in the POST request if the corresponding checkbox is selected in the search form. The parameter name is derived from the `name` attribute of the checkbox, and the value from its `value` attribute. Most checkbox filters send a value of `1` when checked, but some use specific numerical identifiers (e.g., ratings, lengths, languages). Multiple filters can be selected within and across categories. The filter parameters identified from `search-filter-content.php` are: ### Rating - **Panel Rating:** Filter by panel rating level. Value is the rating (1-5) or 0 for no rating. - `panel-5-stars` (integer): Value 5 - `panel-4-stars` (integer): Value 4 - `panel-3-stars` (integer): Value 3 - `panel-2-stars` (integer): Value 2 - `panel-1-star` (integer): Value 1 - `panel-no-rating` (integer): Value 0 (No panel rating) - **Player Rating:** Filter by player rating level or status. Value is the rating (1-5) or -1. - `player-5-stars` (integer): Value 5 - `player-4-stars` (integer): Value 4 - `player-3-stars` (integer): Value 3 - `player-2-stars` (integer): Value 2 - `player-1-star` (integer): Value 1 - `player-not-enough-votes` (integer): Value -1 (Not enough player votes) ### AGS Awards - `ags-award-winners` (integer): Include games that won an AGS Award. Value is 1 if checked. - `ags-award-nominees` (integer): Include games that were nominated for an AGS Award. Value is 1 if checked. ### Game Length - Filter by game length category. Value is a numerical ID for the length type. - `length-full-length-games` (integer): Value 1 - `length-medium-length-games` (integer): Value 6 - `length-short-games` (integer): Value 0 - `length-non-adventure-games` (integer): Value 3 - `length-training-games` (integer): Value 7 - `length-joke-games` (integer): Value 4 - `length-demo-games` (integer): Value 5 - `length-length-not-set` (integer): Value 15 ### Release Type - Filter by release type. Value is a numerical ID. - `release-commercial` (integer): Value 1 - `release-freeware` (integer): Value 0 ### Operating System - Filter by compatible operating system. Value is a numerical ID. - `os-windows` (integer): Value 1 - `os-linux` (integer): Value 2 - `os-macos` (integer): Value 3 - `os-android` (integer): Value 4 - `os-ios` (integer): Value 4 (Note: Shares value with Android) ### Setting - Filter by game setting. Value is a numerical ID. - `setting-contemporary` (integer): Value 1 - `setting-historical` (integer): Value 2 - `setting-fantasy` (integer): Value 3 - `setting-sci-fi` (integer): Value 4 - `setting-other` (integer): Value 5 - `setting-not-set` (integer): Value 0 ### Genre - Filter by game genre. Value is a numerical ID. - `genre-comedy` (integer): Value 1 - `genre-drama` (integer): Value 2 - `genre-horror` (integer): Value 3 - `genre-investigative` (integer): Value 4 - `genre-other` (integer): Value 5 - `genre-not-set` (integer): Value 0 ### Story Type - Filter by story type. Value is a numerical ID. - `story-type-original` (integer): Value 1 - `story-type-parody` (integer): Value 2 - `story-type-remake` (integer): Value 3 - `story-type-fan-game` (integer): Value 4 - `story-type-other` (integer): Value 5 - `story-type-not-set` (integer): Value 0 ### Language - Filter by game language. Parameter name uses `language-` followed by the language name. Value is a numerical language ID. Examples: - `language-czech` (integer): Value 30 - `language-dutch` (integer): Value 35 - `language-english` (integer): Value 36 - `language-espanol` (integer): Value 38 - `language-finnish` (integer): Value 41 - `language-french` (integer): Value 43 - `language-georgian` (integer): Value 52 - `language-german` (integer): Value 53 - `language-greek` (integer): Value 55 - `language-hakka-chinese` (integer): Value 59 - `language-hebrew` (integer): Value 61 - `language-hungarian` (integer): Value 64 - `language-icelandic` (integer): Value 66 - `language-italian` (integer): Value 71 - `language-japanese` (integer): Value 73 - `language-korean` (integer): Value 83 - `language-norwegian` (integer): Value 115 - `language-polish` (integer): Value 123 - `language-portuguese` (integer): Value 125 - `language-romanian` (integer): Value 131 - `language-russian` (integer): Value 132 - `language-slovak` (integer): Value 140 - `language-spanish` (integer): Value 143 - `language-swedish` (integer): Value 148 - `language-turkish` (integer): Value 164 *(This list includes all languages found in the source)* ### Year - Filter by release year or age. Parameter name indicates the year or range. Value is 1 if checked. - `year-2025` (integer): Value 1 - `year-2024` (integer): Value 1 - `year-2023` (integer): Value 1 - `year-2022` (integer): Value 1 - `year-2021` (integer): Value 1 - `year-2020` (integer): Value 1 - `year-2019` (integer): Value 1 - `year-2018` (integer): Value 1 - `year-2017` (integer): Value 1 - `year-2016` (integer): Value 1 - `year-2015` (integer): Value 1 - `year-older-than-2015` (integer): Value 1 (Includes 2014 and older) ### Tags - Filter by tag. Parameter name uses `tag-` followed by the tag ID. Value is 1 if checked. Tag IDs correspond to the human-readable tag names provided in the labels. - `tag-20` (integer): Value 1 (90s) - `tag-6` (integer): Value 1 (Adventure) - `tag-27` (integer): Value 1 (casual) - `tag-9` (integer): Value 1 (Child-friendly) - `tag-25` (integer): Value 1 (Choices Matter) - `tag-23` (integer): Value 1 (Chuck) - `tag-15` (integer): Value 1 (Dystopian) - `tag-4` (integer): Value 1 (Educational) - `tag-13` (integer): Value 1 (Escape the room) - `tag-2` (integer): Value 1 (Fantasy) - `tag-14` (integer): Value 1 (Gameboy) - `tag-11` (integer): Value 1 (Hidden object) - `tag-16` (integer): Value 1 (History) - `tag-7` (integer): Value 1 (Hybrid) - `tag-24` (integer): Value 1 (Maniac Mansion) - `tag-3` (integer): Value 1 (Medieval) - `tag-17` (integer): Value 1 (Museum) - `tag-1` (integer): Value 1 (Non-Adventure) - `tag-8` (integer): Value 1 (Quiz) - `tag-18` (integer): Value 1 (Retro) - `tag-5` (integer): Value 1 (RPG) - `tag-22` (integer): Value 1 (simulation) - `tag-26` (integer): Value 1 (Wild West) - `tag-21` (integer): Value 1 (Word Game) *(This list includes all tags found in the source)* ### Other - Various other filter options. Value is 1 if checked. - `other-play-in-browser` (integer): Value 1 (Play in Browser) - `other-mags` (integer): Value 1 (MAGS games) - `other-pick-of-the-month` (integer): Value 1 (Pick of the Month) - `other-voice-acting` (integer): Value 1 (Voice Acting) - `other-filthy` (integer): Value 1 (The Most Filthy games) - `other-broken-images` (integer): Value 1 (Marked as Broken Images) - `other-broken-videos` (integer): Value 1 (Marked as Broken Videos) - `other-broken-downloads` (integer): Value 1 (Marked as Broken Downloads) - `other-missing-downloads` (integer): Value 1 (Marked as Missing Downloads) ## Response Format JSON object containing: - game_results (array): List of game objects with properties: - id (integer): Unique game identifier - name (string): Game title - author (string): Game creator - filename (string): Path to thumbnail image - release_date (string): ISO format date/time of release - panel_rating (integer/float): Editorial rating (0-5, or null) - player_rating_avg (float): Average user rating (0-5, or -1 if none/not enough votes) - awards_winner (mixed): Award winner information (e.g., array of years, or null) - awards_nominee (mixed): Award nomination information (e.g., array of years, or null) - downloads_total (integer): Total download count - downloads_this_month (integer): Downloads in current month - panel_date (string): Date of panel rating (YYYY-MM-DD HH:MM:SS format, or null) - picks_month (mixed): Featured month information (e.g., array of month/year strings, or null) - total_results (integer): Total number of games matching criteria - sort_type (integer): Sort method used (corresponds to `sort` parameter values 1-17) - filter_type (integer): Internal filter identifier (likely not relevant to external use) - play_in_browser (integer): Browser playability flag (0/1) ## Sample Request This sample includes basic parameters and a few filter examples. { "page-number": "1", "title-or-author": "", "sort": "5", "language-english": 36, "year-2024": 1, "other-play-in-browser": 1 } ## Sample Response { "game_results": [ { "id": 2858, "name": "Another Heaven", "author": "Akril15", "filename": "/site/assets/img/games/thumbs/2858_1.png", "release_date": "2025-04-20 19:54:59", "panel_rating": 0, "player_rating_avg": -1, "awards_winner": null, "awards_nominee": null, "downloads_total": 36, "downloads_this_month": 36, "panel_date": null, "picks_month": null, "total_results": 2485, "sort_type": 5, "filter_type": 0, "play_in_browser": 0 } ] } ## Notes - The "Filter Parameters" section is now documented based on the checkbox inputs found in `search-filter-content.php`. - When multiple filters are selected within the *same category* (e.g., multiple OS, multiple Genres, multiple Years), the API likely uses an OR logic (e.g., show games that are Windows *or* Linux). - When filters are selected across *different categories* (e.g., OS=Windows AND Genre=Comedy), the API likely uses an AND logic. - The application's JavaScript (particularly search.min.js) handles the collection of all checked form fields and filters before submitting the complete JSON payload to the API. ```