Lingooh! Word Puzzle - Playable Demoversion

Previous topic - Next topic

svenart



Lingooh! is a Word Find Puzzle game for Windows Pc´s.
You can select between 5 languages to play (English, German, French, Spanish and Latin).
The goal is to find as much words as possible in 5minutes. For every word found you get a time bonus.
A first playable demo is available for free download on Itch.io
If you want to test it, I would love to recieve some feeback.

https://spagetticoder.itch.io/lingooh :booze:
https://spagetticoder.itch.io/

www.medievalworlds.com

bigsofty

Very professional looking svenart, well done!
Cheers,

Ian.

"It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration."
(E. W. Dijkstra)

dreamerman

Played couple times and have some thoughts about it.
Graphically it's great, overall good design, sprites, fonts, color composition and so on. I like that subtle bubble effect in menu.

Found some issues, like sometimes after finishing a word, there is a single black frame inserted - just like screen would be cleared with black color and nothing was rendered in that single frame.
And here I must go more technical. You set desired framerate to 40fps? Because that Fraps is showing to me, that's bad for two reasons, first may be not visible as this is puzzle game, but game FPS should be related to display device refresh rate, to mitigate possible ghosting, duplicated frames and other artifacts, ideal is same as monitor refresh, with higher refresh screens you can set half or 1/3 of it, so for 120hz a 60fps is ok and so on, generally 60fps is standard or use vsync. My old iGPU is used in like 25%, so don't hesitate and just push it to 60fps ;] Second aspect is, that for fluent game controls you need to check mouse/keyboad input like 60 times per second, arcade games can check more often but for most genres there is no need, and if you do it rendering loop with such target as 40fps it can cause some strange feeling, and that's maybe causing another issue that I encountered: sometimes (specially after proper finishing word when I want to fast start selecting another word) mouse click on first letter is skipped/omitted and game selects second letter, just like my move would be to fast for game to register. So best practice would be some config file that user can force desired framerate, and detach input pooling from render function, or stick to 60fps for both if your goal is html5 target, as 60fps is imposed standard for html5 apps.

Now some general tips/suggestions:
- give option to switch between fullscreen/windowed mode - either single button in game, key, or config file.
- option to change resolution, as high resolution screens or different aspect ratio devices will have some issues, but this attracts additional work, like doing proper menu system not relaying on prepared earlier background (yet they are great),
- you may use ShoeBox packing to protect graphical assets in some manner,
- maybe additional mode/variation, with different game mechanic,
- I probably had more suggestions but it's late and I forgot them :(

Good that you put it on itch.io, chance to get more interest and opinions, possible fans and ideas for the game, but what are plans for final game? Some pack of several puzzle games in one for Steam, or html free2play game on indie services or something else like mobile game with ads.
btw. that first word in english dictionary :D
Check my source code editor for GLBasic - link Update: 20.04.2020

svenart

thank you both for your feedback!

@ dreamerman:

Thanks for pointing that out (black frame). Indeed, I´m using limitfps 40. I will try to set it to 60 and test it again, thanks. I also think I will add a fullscreen option, even if this game was not really planned to be played in fullscreen. Maybe a setup exe or inside the game, don´t know yet.
I know about the shoebox but to be honest, never used it until now. I will try it out.
Yes, I´m indeed thinking about a few different modes, but could not decide right now. Maybe a beginner and an advanced mode. or a 50level campaign... not sure..

I would like to ask you 2 things:
Have you played the game in English or other language?
Did you think it was too easy, or too difficult (to find more than 2 letter words), or balanced?
https://spagetticoder.itch.io/

www.medievalworlds.com

dreamerman

Thing about fullscreen mode/resolution, consider that someone can play on laptop with 14'' display so it's better to have fullscreen option or for example tablets (I know that such Windows devices aren't popular but you know), and same goes for resolution, there is plenty of high resolution that just 1280x720 windowed mode without scaling would be to small. It's not matter to focus on such high resolution devices, but just let them be able to test and play your game :)

60fps is just better, and GLB is fast enough to do it on weak gpu's.

I played only in English (not native language), top score 459, but I must say that I focus more on technical aspect of games not on puzzles itself :D And it was most likely balanced, found some 5-6 letter words, most were 3-4 letters, but in general such are just easier to found, so I may say that this was balanced. Additional difficult modes may give some variation, specially with additional game mode.

Thing about additional languages, you could use font with extended ASCII (256 characters) to have some german/spanish specific letters. If you will stick to those couple languages that should be sufficient, but for other languages with specific symbols some tricks would need to be used to have all letters/symbols (as currently GLB doesn't support unicode font rendering).
Check my source code editor for GLBasic - link Update: 20.04.2020

svenart

@ Dreamerman

thanks again. I have already added a fullscreen switch button and changed limitfps to 60 and it seems that there is no black frame anymore. Also the mouseselecting is better/faster now. I hope I can upload an updated demoversion maybe in the next 1-2 weeks.

I´m unsure right now about the french and spanish language. I think you are right, if i offer this languages to play, I should add the relevant alphabet for this country with all special letters. I will think about this.

I have one Question: I would love to add a online highscore which could be stored on my webserver. But I have 0 experience in this "field" of programming (network/internet stuff). Is it hard to do? Do you know some examples or tutorials or have a hint for me where to start this?
https://spagetticoder.itch.io/

www.medievalworlds.com

erico

Looks very polished. Everything is very clear/distinct so you can spot words from far away and concentrate on the game.
Well done! :good:

svenart

https://spagetticoder.itch.io/

www.medievalworlds.com

dreamerman

If you only changed fps without addressing reason why that black frame appears it still may be there but just visible for shorter time so not so notable/easy to spot. I would advise to find why it's appearing.
Such languages as German should be fairly easy as (not sure) all letters are in extended ASCII, but French/Spanish would require some work to get have all letters.

There is quite a lot of thing to talk about when considering online highscore, but generally You need server with PHP and sql, don't have any specific tutorial but most info you can find here: w3schools
On one hand such solution is simple to implement and easy to maintain, but on other it's easier to hack (plain http request can be catch) without some kind of encryption of additional score verification.
You can consider two approaches:
1. simplest, just store each new uploaded score (nickname, score, number of words etc.), show 10 best, clear rest one of couple days,
2. store each user data separately, update user best score and show 10 best users, this way you can easily count users, active users and so on,
Below you can find some really simple highscore system for first option, in mysql admin create sql table 'highscores' with 3 fields - 'id' (autoincrement), 'nickname', 'userscore', modify and place those 3 php files on your server (for easier testing you can use local http server, for example xampp for windows)
Note some functions can have different name depending on your server specification and supported PHP/sql version, and most likely there are some typos here as this is fast modification of my older highscore system so take that in mind.

dbase.php - keep username, password in a separate file
Code (glbasic) Select
<?php
$db_user 
"your_user";
$db_pass "your_password";
$db_serv "localhost"; // for localhost tests
$db_name "your_db_name";
?>


add_score.php - user to upload new scores
Code (glbasic) Select
<?php
error_reporting
(0); // use this for public version
//error_reporting(E_ALL); // use this for developing and testing
header("Content-Type: text/html; charset=utf-8");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET"); // it can be POST instead, depends on your needs

require("db_base.php");
$link mysqli_connect($db_serv$db_user$db_pass$db_name);
if (
mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}

if (!isset(
$_GET['score']) || !isset($_GET['nick'])) {
printf("Not all variables were set in GET/POST request.");
exit();
}

$nick mysql_real_escape_string($_GET['nick']);
if(
is_null($nick)) $nick="Anonymous";
$pkt = (int)$_GET['score'];

$idzapytania mysqli_query($link"INSERT INTO highscores (nickname, userscore) VALUES (`".$nick."`, `".$score."`)");

mysqli_close($link);
?>


fetch_highscore.php - get current best 10
Code (glbasic) Select
<?php
error_reporting
(0);
header("Content-Type: text/html; charset=utf-8");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET");

require(
"db_base.php");
$link mysqli_connect($db_serv$db_user$db_pass$db_name);
if (
mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}

$score_count 0;

$out_str "retrieving_info<br>\n";

$idzapytania mysqli_query($link"SELECT nickname,userscore FROM highscores ORDER BY `userscore` DESC LIMIT 10");
while ($wiersz mysqli_fetch_row($idzapytania))
{
$score_count=$score_count+1;
$out_str.="score_entry,id='".$score_count."',nick='".$wiersz[0]."',points='".$wiersz[1]."'<br>\n";
}
mysqli_close($link);

$out_str.="scores_count=".$score_count."<br>\n";

echo 
$out_str;
?>

It should give you some idea how that should look like, and you can upgrade this and modify to your needs, also such example will show you what php/sql things you need to know to work with this.
This file will print 10 best scores in plain txt file formatted like this:
Code (glbasic) Select

retrieving_info<br>
score_entry,id='1',nick='player_1',points='12312'<br>
score_entry,id='2',nick='player_2',points='4234'<br>
score_entry,id='3',nick='player_3',points='342'<br>
scores_count=3<br>

that you later need to parse with GLBasic, but this is rather simple with basic InStr/Mid$ functions.

To send new score use NETWEBGET$(server$, path$+"add_score.php?nick=" + usernick$ + "&score=" + userscore%, 80, 1024, 5000)
To get 10 best score use result$ = NETWEBGET$(server$, path$+"fetch_highscore.php", 80, 4096, 5000)   - 4096bytes should be enough for 10 entries, later you can parse result$ to get all entries.
This is easy way, you can add asynchronous http handling to not block app workflow, additional encoding and so on..

Check my source code editor for GLBasic - link Update: 20.04.2020