Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411660 Posts in 69396 Topics- by 58452 Members - Latest Member: Monkey Nuts

May 16, 2024, 02:53:46 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsFLIES FLIES FLIES - queer sci-fi comedy VN - Free demo on Steam!
Pages: 1 2 3 [4] 5 6
Print
Author Topic: FLIES FLIES FLIES - queer sci-fi comedy VN - Free demo on Steam!  (Read 14188 times)
nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #60 on: July 28, 2023, 09:14:32 AM »

The premise of this is super interesting. I’ve never really played a VN aside from Newgrounds stuff ages ago, but I’ll keep an eye on this.

Thanks a bunch!!

Hey Guess What

That dang STEAM PAGE is live! Go put it on your wishlist if this sounds like your jam!
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #61 on: July 28, 2023, 01:11:03 PM »

I'll wishlist it just for boosting the algorithm, no idea yet if it's my kind of game to actually play. I'm just here for the fun devlog Smiley
Logged
nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #62 on: July 28, 2023, 04:47:01 PM »

Ah, well being so active in the devlog definitely gets you a free copy of the game. Hoping that tips the question of "Is this for me?" a little more favorably.  Smiley
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #63 on: July 29, 2023, 02:30:18 PM »

Nah, don't. It'll look better on the review if I paid for it plus I doubt it's going to be more than a day's lunch money Cheesy

(I don't buy games very often these days so it's not a significant part of my budget anyway)
Logged
nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #64 on: August 05, 2023, 08:07:43 PM »

D'aww. I don't mean to pressure you to give up your lunch money... but yes. I'm planning to keep it cheap. I wanted to set the price at $10 USD for a season pass because that feels like a fair price for 6 episodes x 25ish minutes each x my heart and soul in every minute. But now that I'm coming closer to announcing an actual Steam release date I'm starting to feel more self-conscious that the haphazard lack of visual cohesion will drive away a lot of customers at the $10 price point. So... maybe $5? Maybe that's still too much? I'm nervous about it.

Here's a GIF from episode 2, where Flyman figures out how to communicate with you dads when they are trying to squash you:


Logged

JobLeonard
Level 10
*****



View Profile
« Reply #65 on: August 06, 2023, 11:56:59 AM »

It's a bit tricky, yeah. What is a fair price in terms of work put into it and expected sales vs what people feel entitled too. Don't know what to suggest tbh Shrug

LOL, slightly antagonistic communication there
Logged
nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #66 on: August 11, 2023, 01:28:20 PM »

I've been hammering out episode 2.





In this sequence, Finn's dad activates a robotic replacement of him. We'll see how that goes!

---

I messed up pretty big-time by dismissing Valve's message about Visual Novel Fest. When they sent that private announcement, I didn't have a trailer or a Steam page for FFF, so it wasn't eligible for the fest. When I lost my contract job and hurried up the release schedule, I didn't realize that it meant the Steam page would be ready in time to submit to the festival for extra exposure. So I missed the window to submit, a giant marketing flub as I'm getting so close to beta testing and initial release at this point. Self-publishing and self-marketing are hard. Valve support wouldn't make an exception for my late submission, even though I was totally convincing in my appeal:



I felt a huge loss of morale over this oversight, and really can't think of any silver linings. Unless the initial response is very poor and I have to scramble to update and fix a bunch of problems, in which case a "stealth launch" might be nice. But I don't want a marketing worst-case-scenario to be followed by a launch worst-case-scenario. So that thought doesn't make me feel better.

So I've been brute-forcing my way past the discouragement and just narrowed in on developing the damn thing real good. Guess that's life.  Ninja

PS If you read this far and pity me, you could wishlist FFF and I'd feel a lot better  Beg STEAM PAGE
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #67 on: August 13, 2023, 09:09:59 AM »

Big-Picture Themes

I came across this transcription of a speech on my Mastodon feed this morning. Reading it got me feeling super inspired. This is such a good distillation of many of the values I’ve been learning and striving for in life.

FLIES FLIES FLIES starts out as a mystery on the scale of one family, the Flynns, and what happens to Finn (who becomes Flyman). But I’ve written and planned it to go far beyond that scope and explore the big ideas and problems of our time. Sometimes all my social media and news feeds only have bad news, and it looks like there won’t be time to tell the story and get that far before we’re all truly f***ed. I hope that’s not how things turn out!

But today I’m thinking about how there’s a core aspect to my project that sets it apart from major sci-fi comedy influences like Rick and Morty—the story I’m telling is not nihilistic. It has values. I don’t know to what extent I’ve brought that across on the Steam page or in any of the marketing. And would it help, or do people these days think values are embarrassing and nihilism is where it’s at. (Edgy and dark, on the other hand—I’ve got plenty of that to offer up).

If you take some time to read that speech, I hope you like it as much as I did.  Gomez
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #68 on: August 14, 2023, 06:38:49 PM »

Final Pre-beta Feature

Big news! I've finished implementing every engine feature that will be in the VN before Beta, and if Beta goes smoothly, before launch.



Today I finished implementing the feature I procrastinated the most, Read Mode vs. Watch Mode. This feature is kind of hard to explain. In concrete terms, it means you can either click through the VN at your own pace, or sit back and let the whole thing play like a TV show. But testing every edge case of this is gonna suuuuuck.

FLIES FLIES FLIES was literally written to be a TV show, and when I started coding the engine, I still thought I might be using it to output videos that I would publish as a webseries. So the only mode was Watch mode, and everything in the scripting language was designed to execute its own timings. When I made the decision to pivot to just making it a Visual Novel, I asked myself whether I could mostly leave its behavior as-is.

I figure VN audiences will be used to having the option to take as long reading the dialogue as they want, even if it is also voice-acted. Maybe some people will even turn the voice volume all the way down and JUST read. That thought makes me sad, because I'm still putting just as much work into having the voiceover and watch mode give a quality experience that could be compared with the animated shows which inspired FLIES. But I think it's valid so I've made voiceover volume configurable.

I strongly considered not adding Read mode, with rationale along the lines of, if Watch mode is MY favorite, why would I spend time and energy providing a 2nd mode that I personally wouldn't recommend? If all the testers who use Read mode end up saying "This just wasn't funny and the joke timings never worked" then maybe I will swing back around to that perspective and remove the Read mode feature. But I think it was a good move to at least implement it so I have both options open to me. I'm also a little scared that if it only had Watch mode, people would be everywhere in the comments saying "This isn't a game OR a visual novel, it's just a video". To imagine a more optimistic reason to add Read mode, I envision whether anyone will connect deeply enough with FLIES to want to write critically about it the way I used to write essays about stuff that inspired me. That person would really want to be able to take a screenshot of a moment in the story without having to nail the timing on the PrintScrn key.

 Hand Joystick
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #69 on: August 22, 2023, 12:56:37 PM »

In the weeds with flywriting

Episode 2 is coming together, but I realized I had a problem when I saw this:



(There are several problems on display there, like the keyboard was supposed to have been removed, the lime green text is garish, why is George crying, etc. but I'm focusing on what I think is the most important problem.)

It's the system I created for "Flywriting", which renders text in truetype fonts into a set of points that my engine uses to trace Flyman's path and generate the letters. (See previous dev logs for more on that.) The text goes off the right edge of the screen. And it's generating the whole outlines of letters, like you would only use when drawing showy bubble letters, not when taking notes or trying to communicate at a reasonable speed. So this message, "Just woke up this way", takes forever to present to the viewer, and also, imagine that you're hearing a fly buzz the whole time.

Anyone forced to express themselves through Flywriting would realize that you need to make the quickest version of every letter in your message. The system rendering points from the truetype fonts, just doesn't understand that. Not only is it double-outlining every letter, it doesn't really care which order it hits each point. So sometimes Flyman crosses back over a whole letter to start a stroke that could have started from the other side, etc.

So the order of the points matters, and the strokes need to be kept simple. In my data files, the paths are serialized like this:

Code:
"assets/fonts/CedarvilleCursive-Regular.ttf 128 10 Just woke up this way": "117|223|118|213|121|204|127|195|132|187|138|179|135|175|125|175|117|170|111|162|107|153|105|143|104|133|105|123|108|113|112|105|120|98|130|97|137|103|140|112|141|122|142|132|143|142|144|152|151|155|160|154|163|157|158|165|151|172|150|181|152|191|154|201|154|211|154|221|151|231|145|239|137|244|127|243|120|236|117|226|124|230|130|237|140|236|145|227|147|218|147|208|146|198|144|188|140|186|134|195|129|203|125|212|123|222|111|140|112|150|116|159|122|167|131|169|139|166|138|156|137|146|136|136|135|126|134|116|131|107|123|104|115|110|112|119|110|129|147|166|150|159|145|159$159|164|161|154|165|145|170|136|176|128|183|129|179|138|174|146|169|155|167|164|171|171|180|166|188|160|195|153|201|145|205|136|210|129|211|138|208|148|207|158|209|167|219|165|228|161|236|156|244|156|237|163|228|167|219|171|209|173|201|170|199|160|192|165|184|171|175|176|166|177|160|170|159|165$246|160|236|161|238|155|244|150|253|148|260|142|268|135|276|136|274|145|272|155|272|165|281|163|290|158|298|152|301|158|293|163|284|168|275|172|267|177|258|174|251|167|254|156|260|165|264|160|266|150|263|147|256|154|268|144$301|144|297|140|287|141|277|141|281|136|290|134|300|133|308|129|313|121|320|114|321|122|317|132|324|135|318|140|309|143|306|153|305|162|308|171|318|169|327|165|334|158|337|164|329|171|320|175|311|177|301|176|298|167|298|157|300|147|300|145$-2147483648|-2147483648$392|170|393|160|396|151|399|142|405|134|409|140|405|149|401|159|399|168|407|167|415|161|422|154|429|147|434|138|441|138|438|148|436|157|436|167|445|167|452|160|457|151|459|142|460|132|468|135|478|136|487|132|489|138|479|142|470|143|465|150|461|159|455|167|447|173|437|176|430|171|428|161|423|163|415|169|407|174|397|177|392|171$486|168|488|158|491|149|497|140|504|134|514|131|523|134|532|137|542|135|549|137|540|141|530|143|528|152|523|161|517|169|509|174|499|177|489|176|495|171|504|169|513|164|519|156|523|147|516|144|506|145|499|152|495|160|494|169$547|177|548|167|552|158|556|149|559|139|562|130|564|120|568|111|575|105|577|114|575|124|571|133|574|136|583|136|588|143|585|153|578|160|569|165|576|170|586|170|595|166|602|159|608|158|604|167|597|173|587|176|577|177|568|175|562|167|557|168|552|177|566|157|574|155|580|147|576|142|568|148|564|152$605|158|608|148|610|139|614|130|623|124|629|129|628|139|625|149|618|156|612|163|617|171|627|171|636|168|644|162|652|158|649|167|641|173|632|176|622|178|612|176|605|169|605|159|617|140|614|149|620|144|623|135|623|134$-2147483648|-2147483648$708|164|709|154|713|145|718|136|724|128|731|129|727|138|722|146|717|155|715|164|720|171|728|166|736|160|743|153|749|145|753|136|759|129|760|138|757|148|755|158|757|167|767|165|776|161|784|156|792|156|785|163|776|167|767|171|757|173|749|170|747|160|740|165|732|171|724|176|714|177|708|170|708|165$783|204|784|194|786|184|788|175|790|165|794|156|799|147|807|141|816|138|824|144|824|154|823|164|830|162|840|158|841|164|832|168|822|171|814|176|804|178|797|177|795|186|792|196|790|206|783|208|806|168|815|165|818|156|816|146|810|150|804|159|800|166$-2147483648|-2147483648$901|144|897|140|887|141|877|141|880|136|890|134|900|133|908|129|913|121|920|114|921|122|917|132|924|135|918|140|909|143|906|153|905|162|908|171|917|169|926|165|934|158|937|164|929|171|920|175|910|177|901|176|898|167|898|157|900|147|900|145$961|149|953|150|946|158|943|167|940|176|935|172|937|162|939|152|940|142|942|133|943|123|944|113|946|103|949|93|955|86|964|88|965|98|964|108|961|117|957|126|952|135|948|144|954|141|964|141|968|150|967|160|969|169|978|170|987|166|993|158|999|154|998|164|991|171|982|175|972|177|963|175|962|165|961|155|950|123|955|118|958|108|959|99|956|95|952|104|950|114|950|118$998|151|1001|142|1008|137|1008|147|1005|156|1003|166|1009|170|1018|166|1026|161|1034|155|1036|161|1028|167|1020|173|1011|177|1001|177|996|169|997|159|1004|116|1011|118|1004|119$1047|160|1037|161|1039|155|1045|150|1053|148|1061|142|1069|135|1077|136|1075|145|1073|155|1073|165|1082|163|1091|158|1099|152|1102|158|1094|163|1085|168|1075|172|1068|177|1059|174|1052|167|1055|156|1061|165|1065|160|1067|150|1064|147|1056|154|1069|144$-2147483648|-2147483648$1157|170|1158|160|1162|151|1165|142|1171|134|1175|140|1171|149|1167|159|1165|168|1172|167|1180|161|1188|154|1194|147|1200|138|1207|138|1204|148|1201|157|1202|167|1210|167|1218|160|1223|151|1225|142|1225|132|1234|135|1244|136|1253|132|1254|138|1245|142|1235|143|1231|150|1227|159|1220|167|1212|173|1203|176|1195|171|1194|161|1188|163|1181|169|1172|174|1163|177|1157|171$1253|174|1252|164|1252|154|1256|145|1262|137|1270|131|1280|128|1289|129|1293|138|1293|148|1290|158|1289|167|1298|169|1307|165|1316|160|1325|160|1318|166|1309|171|1300|174|1290|176|1283|171|1280|167|1272|173|1263|177|1253|175|1267|169|1276|163|1282|156|1285|146|1283|138|1274|140|1267|148|1262|156|1260|166|1260|170$1314|209|1315|199|1320|190|1326|182|1333|176|1342|170|1350|165|1355|157|1352|156|1345|163|1337|169|1328|174|1321|169|1322|159|1325|150|1330|141|1335|133|1338|141|1333|150|1330|159|1331|166|1339|160|1346|154|1353|146|1359|138|1365|143|1363|153|1364|159|1374|156|1383|152|1389|155|1380|159|1370|163|1361|167|1357|175|1354|184|1352|194|1349|204|1346|213|1340|221|1332|227|1322|226|1316|219|1314|209|1323|218|1332|220|1339|212|1343|203|1345|194|1347|184|1350|174|1343|176|1335|182|1328|189|1323|198|1321|208|1321|208",

x|y|x2|y2|x...|y...$

A pipe (|) separates coordinates, and a $ separates strokes. Say I wanted to re-order the strokes and points in that really long line in the example above. It would be a ****ing nightmare. And I would have to re-run the animation in the engine to see if it worked at all.

So I turned to my custom Lisp toolkit, which includes a really nifty (if I do say so myself) API for making Visual Studio Code extensions.



I coded up a new extension which renders the highlighted sequence of flywriting as an SVG. So now I can edit flywriting paths and see the changes in realtime. If I want to visualize the animation of the letters appearing, I move my cursor through the points from left to right and watch the text render out as if a fly were writing it (lol).

At this point, I could clean up some of the problems in the example, such as how the J draws strokes across itself which should actually not get lines in them:



But even if I did that, Flyman would still be working way too hard to make an overly fancy cursive J. So what if I just draw the paths myself?

So I made the SVG rendering respond to clicks by adding points, and printing them out in coordinate form so I can splice them into the string representation.



This is still a stupidly laborious process, and I have to do it for every piece of flywriting dialogue. But I think it serves well enough, at least for getting through episode 2. Past releasing the first 2 episodes, I'll either keep iterating on this editor, or look for a better pre-made tool.





Quick and to the point. Might need thicker lines, though. And definitely garish in green. And I must have made a mistake because the "s" is drawn last. Easily fixable, though  Tears of Joy
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #70 on: August 24, 2023, 09:08:45 PM »

Yesterday was a big day because I was able to run through episode 2 from start to finish, and see that what's there, pretty much tells the story. Parts of the scene implementation definitely needed to be fleshed out, so I took notes on everywhere I would do that. I got up to 6 + 1/2 pages of these notes. Then today, I viciously attacked those pages as my new to-do list. I haven't gotten everything done, but I will before I let myself fall asleep.  Evil

Also a voice actor submitted the final recordings I needed to get the VO completely implemented in episode 2! Huzzah huzzah huzzah!
Logged

oldblood
Level 10
*****

...Not again.


View Profile
« Reply #71 on: August 26, 2023, 09:10:55 AM »

I felt a huge loss of morale over this oversight, and really can't think of any silver linings. Unless the initial response is very poor and I have to scramble to update and fix a bunch of problems, in which case a "stealth launch" might be nice. But I don't want a marketing worst-case-scenario to be followed by a launch worst-case-scenario. So that thought doesn't make me feel better.

If its any consolation, I posted some data from the VN Fest in my most recent devlog. I don't think it will make or break your project to have participated in it.
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #72 on: August 26, 2023, 09:34:50 AM »

Thanks for that! I felt like such a fool for missing out. But I think I'm over it.  Wizard
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #73 on: September 12, 2023, 01:07:39 PM »

Fake scene skipping + Sprite layer logging = Semi-automated visual novel testing!

The last few days, I've been focusing on eliminating all the bugs I've had waiting in my to-do list while I focused on implementing new episode 2 content.

I was aware (and worried about/trying not to go crazy thinking about) how every time I fix a bug, I might be introducing other bugs. I'm doing things like going through scenes and making sure all the characters and props are layered and positioned correctly, a lot of which is automated by the engine, so there's a very real risk that I change the engine code and some scene in episode 1 that I haven't touched in ages is suddenly graphically broken just as an episode 2 scene is fixed. In the back of my head I was dissatisfied with the lack of a reliable solution--other than manually testing each previous episode before releasing any updates. (Because, the more episodes I release, each one would add 30ish minutes of manual testing time, EVERY time I want to push a patch.)

There are 2 seemingly unrelated features I've added to the engine recently. On a walk this morning, I had a eureka moment that I could combine them to make a very robust, almost fully automated way to test scene visuals.

1. "Fake" scene skipping

Very early on, I decided that a "scene" in the engine would be a data structure containing the background, character positions, prop positions, time of day, light source data, etc. of any given location in an episode. So I would define a scene like "Finn's bedroom - night" which the engine would reuse every time I cut to Finn's bedroom at nighttime throughout the episode. If Finn appears, moves, opens a book (which I handle as a "prop" in the scene), etc., those things are recorded in the scene even if the episode goes to another scene before coming back later.

The implication of this, is that if an episode proceeds in a timeline like so:

1. Show Finn's bedroom at night, Finn has a phonecall so a phone prop needs to be added
2. Show Finn the next day at school
3. Show Finn's bedroom at night again, after school has ended.

When we go back to the nighttime bedroom scene for #3, the phone prop WILL STILL BE THERE when it's not supposed to be. That's a bug. But, for a sequence like this:

1. George is at home and makes a phonecall to Ernest
2. Ernest answers the phone at band practice
3-infinity. Cut between George's scene and Ernest's scene as they alternate speaking lines

This is an ideal system because I WANT the props, characters, etc. to be preserved whenever I cut between the two scenes.

So to fix the first, problematic case where Finn's phone prop isn't supposed to be there later, I have two choices:

a) remove the phone prop manually before switching to the school
b) create a second scene data structure, i.e. "Finn's Bedroom - night 2" and recreate the backdrop and everything else from the first bedroom night scene there. This is harder, but prevents a host of bugs I could introduce by changing the phonecall scene and forgetting to remove things before I reuse it.

I hope this isn't hopelessly confusing, because I can't really use more dev time to proofread and explain it better Tongue

Here's where fake scene skipping comes in.

Imagine I want the player to be able to skip from #1 and #3 in the episode timeline. I can't just use a goto statement to skip over every script instruction in #1 and #2, because then we'll arrive at #3 with props and characters missing which might need to be there. My first solution to this problem was to declare certain instantaneous instructions in my scripting language as "unskippable", i.e. "ADDCHARACTER FINN LEFT FACINGRIGHT" in #1 would always be called even when skipping to #3.

I ran into problems with that approach when I realized I needed to implement certain script instructions that have unskippable side-effects, but necessarily take multiple frames to complete. For example, tweening a character between 2 positions, and expecting that they will stay at the destination position any time the scene is reused later.

For these, if I declared them unskippable, the player would click "Go to scene 3" and still have to watch certain animations play.

So for a long time I was planning to keep the skip feature out of release builds, and only use it myself when testing, acknowledging that tweens would just be ignored if I skipped them.

Eventually I came up with the solution that, instead of declaring certain script instructions "unskippable", I should require EVERY script instruction to implement 2 behaviors: a normal behavior, and a "skipping" behavior.

So an instruction that tweens a character's position, would have a logic like this:

Code:
if skipping
    just set the character's position to the destination in the Scene object
else
    animate the character moving between the positions, THEN set the character's position to the destination in the Scene object

Then what really happens under the hood when the player skips a scene, is that EVERY INSTRUCTION in the script STILL GETS CALLED, but its side-effects are carried out instantaneously, and any multi-frame processes are skipped.

This means that I can launch my build, skip to the end credits of an episode, and pretty much every piece of logic in the script will still have been carried out step by step.

2. Sprite layer logging

After enough times manually inserting random print statements to figure out what went wrong when I encountered a visual bug (like a prop appearing behind another prop when I wanted it in the foreground), I had devised a reusable tool for that. It's a function in my engine that iterates through every sprite layer and camera, outputting something like this:

Code:
Logging Sprites
###############
Camera #0 (0, 0, 1280x720)
bgColor: -16777216
--------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
---------------
Camera #1 (0, 0, 1280x720)
bgColor: -16777216
--------------
|   0. {assets/images/daySkyEdited.png at (174.117647058824,0) with origin (x: 640 | y: 360), angle 0, scale (x: 1 | y: 1), size 1280x720, alpha 1, frame 0}
|   1. {assets/images/paperLandscape.jpg at (174.117647058824,0) with origin (x: 1100 | y: 850), angle 0, scale (x: 0.424 | y: 0.424), size 931.764705882353x720, alpha 1, frame 0}
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   2. {assets/images/flyman.png at (773.833333333333,166) with origin (x: 249.5 | y: 187), angle 0, scale (x: 1 | y: 1), size 499x374, alpha 1, frame 0}
|   ---------------
|   ---------------
|   ---------------
---------------
Camera #2 (0, 0, 1280x720)
bgColor: 0
--------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
0. {null at (0,0) with origin (x: 640 | y: 360), angle 0, scale (x: 1 | y: 1), size 1280x720, alpha 0, frame 0}
1. {null at (0,0) with origin (x: 640 | y: 360), angle 0, scale (x: 1 | y: 1), size 1280x720, alpha 1, frame 0}
---------------
Camera #3 (0, 0, 1280x720)
bgColor: 0
--------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
|   ---------------
---------------

I would use this to figure out the bug and fix it.

Combining the two

So my wild idea, was to add a script instruction, ASSERTLOGSPRITES, which I could add to a script in any scene where I've fixed a bug. It generates the sprite layer log from the correctly displayed scene, and writes it to a file which I add to version control. Then, in subsequent builds, it regenerates the sprite log, and COMPARES it with the known correct log for that scene.

With ASSERTLOGSPRITES calls placed throughout an episode script, I can test an entire episode for bug regressions simply by running it and skipping past the final scene, BECAUSE nothing is really skipped, so all the state changes and assertions happen instantaneously Smiley

To make it even easier to fix regression bugs, I made ASSERTLOGSPRITES output a fully formatted diff between the expected and actual states of a scene:



(filename containing spoiler redacted)
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #74 on: September 14, 2023, 11:49:41 AM »

I found this thread shared on Mastodon, and it got me thinking that I'm close enough to release and it just might be a great opportunity to submit FLIES to IGF 2024. I filled out the form for the fee waiver (I finally found a job recently but I haven't started yet so I'm still very tight on funds). Anyway, I doubt FFF will go very far in the contest, because it's so weird and janky and not-a-real-game, and I try to steer towards humility about my work. But my main motivator for submitting is this snippet from the advice thread:

Quote
My game isn't really for money / I don't care about getting a publisher or etc / My thing is weird and niche, will anyone in IGF care?

YES

I'm going to quote my past self here: The pool of judges who's into advocating for weird shit is smaller but we exist and we put in the time. We see you and we love what you do. Please keep doing it.

I truly deeply love the stuff we get from tiny devs just making cool weird shit. I try my best to feature at minimum several in my IGF games threads every year. Trust me when I say yall are my favourite part of the competition every year and consistently my source of biggest surprises and joy. Life Tastes Like Cardboard, Sylvie Lime, Memory Card - these are the games I excitedly foist on my friends every single time after the compo is over. Please keep submitting them, yall give me life

I thought this advice might be useful to other folks here, and there's just under a month of time in which to submit.
Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #75 on: September 22, 2023, 08:30:54 AM »

Mac App Notarization

Another road-block on the way to release...

Quote from: Valve
Starting October 14th, 2019 Steam will require all new macOS Applications to be 64-bit and notarized by Apple. If your Mac application already supports 64-bit, please login to Steamworks and select the "macOS -> 64 Bit Binaries Included" checkbox in the "Supported Operating Systems" section for your application. This will ensure that your macOS app will appear as compatible for users who are running Steam on macOS 10.15.
(source)

So I need to "notarize" EVERY Mac build  Facepalm

MacOS was the most unfriendly platform I released my previous VN for on Steam. That was back in 2016, and they've made things worse! Notarization is another complicated build step I have to set up and maintain in my automated builds, and notarizing requires a $100 payment to Apple every year. What the hell does Apple need more of my money for? Honestly a horrible shakedown.

For my own convenience, because I hate Apple's business practices, and because games are known not to sell well enough to Mac users to justify the cost of porting, I wouldn't do a Mac build at all. (Microsoft is also terrible, greedy, and the worst, but it's still easier to publish on Windows and you can actually make a profit doing so.)

The three problems that compel me to publish on MacOS are this:

1. I strongly believe my work should be accessible to EVERYONE. A lot of people don't have access to a Windows or Linux PC.
2. I have family members who are locked into the Apple ecosystem, and my family are my biggest fans. If I can't get my work in front of my biggest fans, I'm toast.
3. I could just build for the Web, but you can't release or monetize an HTML/js game on Steam. I think Steam is (regrettably) the best market for my work, so...

I paid the $100 and I'm now trying to get the notarization working. I'm following this guide for doing that automatically in GitHub actions (thanks Federico Terzi!) and my fingers are crossed.

Logged

nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #76 on: October 04, 2023, 03:16:14 PM »

Feels fake:

The Mac app notarization went almost exactly the way that tutorial said it would. The only problem was that some files inside the package needed to be notarized individually before the package as a whole could be notarized, because the notarization doesn't happen recursively (weird). But anyway, I pretty much got that part done the same day I posted that I was going to work on it.

I fixed a bunch of engine bugs and finished episode 2. I pushed a private build to Steam and Itch, submitted that build to IGF, and then today I sent beta codes to my Patreon supporters.

If the feedback from the beta is positive, and the amount of VN-breaking bugs is manageable, could I be announcing a release date very soon??? I don't want to jinx it, but it's possible.

And then I'll move on to episode 3.  Ninja
Logged

James K. Isaac
Level 0
**


View Profile WWW
« Reply #77 on: October 05, 2023, 09:45:54 AM »

Love the premise of this. The mood/atmosphere is compelling and makes me want to delve in and find out more.
Logged
nathy after dark
Level 8
***


Open Sourceress


View Profile WWW
« Reply #78 on: October 25, 2023, 09:09:55 AM »

Thank you very much!

Right now I'm in the process of getting my build to pass Valve's pre-release review process. I accidentally submitted an old build because managing SteamPipe channels is confusing, so I waited 4 business days and a weekend to get a review reporting crashes that I'd fixed already.  Facepalm

I also am having to convince them that all my usage of 3rd-party assets is above-board copyright-wise. Which is nervewracking--but I do believe I've followed best practices along the way and will get their approval. It's just that I have also started reaching out to lawyers for help with this... Once this is resolved I'll write up more in-depth about this.
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #79 on: October 25, 2023, 12:30:34 PM »

"Haven't been on tigsource in literally months, wonder how FLIES FLIES FLIES devlog is doing? ... oh Apple is still being a gatekeeping jerk to small developers I see"

What kind of worries do you have regarding copyright? (Especially in a world full of asset flips)
Logged
Pages: 1 2 3 [4] 5 6
Print
Jump to:  

Theme orange-lt created by panic