What I’m Playing: Honkai Star Rail

(screenshot gallery at bottom)

In short, it’s a space fantasy RPG, turn-based combat, gacha but generally free-to-play (F2P) friendly. I’m running it on iPad, but it also has Android, Windows, soon Playstation. Like the company’s previous two games, Honkai Impact 3rd & Genshin Impact, it’s very pretty. Unlike them, it’s turn-based combat, with heavy emphasis on elemental rock-paper-scissors, getting team skill synergies, and better gear (“light cones” are weapon buffs, “relics” are armor).

It has some of the best writing I’ve seen in a game. There’s in-universe lore, letters between characters, chat logs, database dumps, a ton of weird people with semi-branching storylines. Occasionally some really serious consequences; telling the truth might set someone free or destroy them, I’ve seen both happen. Could I have avoided a crushing, cruel fight if I’d been more subtle? There’s also a lot of comedy, and references to science fiction and other culture. The trash cans are more than they seem.

HI3 was all waifus, very blatantly taking advantage of Chinese & Japanese otaku. GI was a little less predatory and monotone, tried a little harder at the global audience, but then had the most annoying mascot ever, Paimon, that did all your talking for you. HSR has found a nice balance, there’s a lot of hot female chars, but also boys (alas, all twinks; none have body or facial hair or any build other than “teenage swimmer” except a couple older NPCs), and the game tends to throw opposite gender flirt at your main character; I’m glad I chose the male MC.

They’ve learned how to make maps. HI3 had very narrow corridors to do linear action fights in. GI has a vast, largely empty and samey world to scrape over for materials, and then closed mini-dungeon arenas to do jumpy puzzles & action fights in. HSR maps are fairly small, mostly interiors or box canyon mazes, with connected zones at a couple places, but they’re much more interesting than the HI3 maps, it’s worth going back a few times to find all the secrets, kill the special monsters. Many HSR maps have 2-3 floors, and switches for different paths, just like a real RPG.

The daily grind is a mix of little fetch quests and other tasks in explored zones, Simulated Universe which is a “roguelite” series of fight rooms & random buffs, Forgotten Hall boss fights, Calyx Trees where you grind mobs for specific materials.

If you overlevel the mobs, you can just set combat on auto, 2X speed, and it’ll be fine. As soon as you hit any kind of elite or boss, or near your level, that stops working, you need to KNOW how elements interact, PLAN your fights, and use skills intelligently. Read the hints as they pop up, and the books in your database/library, it’s all explained.

HSR owes an enormous visual & story debt to Galaxy Express 999 (Matsumoto Leiji anime, willowy long-haired girls & emo boys in dusters with hair over their face, trains in space, vast cosmic threats treated as secondary to personal squabbles and little children, etc), with a much better thought out variant of the cosmology in HI3. Gameplay and visuals are extremely similar to Star Ocean, SMT Persona, some Phantasy Star (esp. the architecture). That’s not to say it’s a “ripoff”, just fairly obvious about its influences. Weirdly just before this, I was playing Eroica, which is fantasy-steampunk-science fiction gacha game about a train on rails of light, fighting magically-corrupted monsters in turn-based combat with the same kind of time-to-strike counter; Eroica’s much lower budget, but it was good training wheels for this.

The UI is pretty much the same as Genshin Impact’s, but a little more smartphone-like; you hit the phone icon, and that gets you a single top-level menu (and your char holds up their phone! Every char has a custom phone skin/dangly bits). There’s hot-buttons around the screen for specific parts of that menu. There’s a soft joystick in the bottom left, action buttons bottom right, border’s full of widgets and data like any MMO. Sometimes it’s a little crowded, but not like a WoW raid screen.

Gacha

So, the gacha needs to be addressed. You get “star rail passes” which are for the normal banners, and there’s a starting banner at 20% off (8 passes = 10 pulls). My advice is to spend the 40 passes for 50 pulls it gives you, just for the discount and one five-star char you get from it; I pulled Gepard the tank, not my favorite but useful later. Then keep pulling those passes on the regular banner after that, and enjoy whatever you get. Don’t spend jade (F2P gems) or anything else on this.

There’s also “Special Passes” for the event banner, currently Seele who is the best single-target DPS char so far, and I loved the version of her in HI3, so I want her back. If you play intensely, and spend all your jade on it, you may be able to hit the “soft pity” level where you have an increased chance to get her. Even if you don’t, the pity apparently carries over to the next event banner. I’m planning on doing everything F2P to get her, and then if that doesn’t work, I’ll think about spending a little real money on it; I have paid for the $5 monthly pass, so I’ll have some paid gems. I’m not willing to spend $200+ to guarantee getting her like some streamers have!

You don’t need any of these. The main character (Trailblazer, same whether male or female) is actually pretty good as physical DPS/tank, and after an event becomes a top-tier fire DPS/tank (Eroica did the same thing, but without the choices! Sei is the best tank in the game). The free shielder (March 7th), healer (Natasha), AOE (rock star Serval), hunter (the very boring Dan Heng), etc. are more than good enough to get you through all the story and all but the very hardest optional bosses. Don’t waste money thinking you need a better character; only spend if you can afford it and really want a specific char. I don’t believe in rerolling, I think it’s a very stupid & anti-fun waste of time, and this game takes a couple hours to reach the point where you could reroll hoping for a 0.3% chance at a specific char.

Rating

I’ve spent, uh, rather too much time in game; since Tuesday, I’ve done consistently 4-8 hours per day, total 27 hours. That’s clearly deranged; I’d like to get it down to ½hr daily, 2hr weekends. But I’m now on the 3rd world! So that should calibrate your JRPG-grind meter. Like all live service games, it’ll presumably keep getting material until we don’t pay/play anymore, HI3’s still supported after 7 years. Shockingly HSR’s not as CPU/GPU/battery-burning as others, a couple hours is <25% battery used.

I have one world left to slowly explore and then nothing but dailies to do until the next update (maybe in May when the next banner starts). If you’re less obsessive about it, this could be months of game right at launch, and you’d never run out.

★★★★★ absolutely must-play if you like JRPGs. Don’t spend money until you know you like it.

Screenshots

What I’m Watching: Florida Man

I managed to watch a TV (‘flix) show!

  • Florida Man (2023): Produced by Jason Bateman, so you should know what you’re getting into, but this is more funny white trash film noir than outright comedy.

Mike Valentine (really? Star Wars-level joke names for romantic hero? played by Édgar Ramírez) is a degenerate gambler ex-cop in Philly working for Moss Yankov (yes, names are this bad, slow growing parasite Eastern European trash mobster, by Emory Cohen), and banging his moll Delly West (dolly, Mae West, we get it, played by model Abbey Lee, but she’s too scrawny, vapid, and Millennial to pull the role off; she tries “sultry” and it’s just “waif needs a cookie”) and holding a torch for his ex-wife Iris (oddly, no obvious connotation? played by Lex Scott Davis, hot but mean). Delly runs off to Florida, Moss sends Mike to catch her. Down there, they get tangled up with Mike’s father “Sonny” (inverted parental relationship, Anthony LaPaglia), and recovered pirate treasure.

So there’s dense setup in the first episode… and then there’s 4 eps of screwing around, not getting to the point, 1 ep of actual plot(!), 1 ep of resolution. There’s a lot of fun but irrelevant side plots, the EMT & the tweaker, and the dumb vacationing deputy who has increasingly bad days down there, and the honest but simple-minded deputy Andy (not Taylor or Clutterbuck, but meant to evoke that incompetence, played a little too broadly by Paul Schneider of Parks & Rec), and the old hit man Dutch (Ritchie Coster, piece of shit not-really-actor who appears in every bad remake, but he’s adequate here, even has some fiery moments!), and the motel owners, and I haven’t even got into the sister’s family drama they all keep wandering thru. But very quickly you can see they just kept writing junk to fill episodes until someone told them to stop.

If this had been edited, and cut down to just what it needed, it’d be a brilliant Jim Thompson-level Grifters kind of movie of betrayal and femme fatales and “Valentine” thinking more with his other brain. But it’s not, so it meanders around and you lose sight of actual plot until it sneaks back in at the end.

★★★½☆

Gretchen, Stop Trying to Make ALAC Happen!

I have a bunch of FLAC files from an album I bought, it was that or low-quality MP3. iTunes (“Music.app”) doesn’t read FLAC, even tho it’s the industry standard for lossless audio.

So I fought with ffmpeg (each “f” stands for “fuck you”), and it converted about half of them into usable files.

Eventually I found XLD X Lossless Decoder: Lossless audio decoder for Mac OS X

Had to right-click, Open to get past Mac Gatekeeper, ugly little program, been in development forever, but it works perfectly. Converted a directory full of flac into m4a, then just dragged them into iTunes and now have music where I want it. If I’m real excited for it, I could downgrade them to AACs, but eh good enough for now.

Everyone be sure to tell Apple that ALAC is stupid and not going to happen.

(the ffmpeg I did was:

for f in *.flac; do
  echo "$f"
  ffmpeg -i "$f" -c:a alac -c:v copy -acodec alac "${f%.flac}.m4a"
done

but now I really don’t wanna hear about how to fix that.)

Angry Wires Monday Music

Vim the Next Generation

So I figured I should modernize my Vim skills, from 1995 to 2023. A lot’s changed since I last configured Vim.

Installed a modern MacVim, in my case sudo port install MacVim. It’s launched with mvim, but I just change alias v=mvim in my .zshrc

In the code blocks below, ~% is my shell prompt, ## filename shows the contents of a file, cat into it or whatever. Neither of those lines belong in the file!

To start, I want to use vim9script. So my old .vimrc now starts with that mode command, then I changed all my comments from " to #. Not much else had to change. The way to detect MacVim etc is clearer now, and I can get ligatures from Fira Code!

Syntax highlighting files can just be dropped in ~/.vim/syntax/

Update 2023-04-11: added statusline highlight colors, under syntax loading

## .vimrc
vim9script
# Mark Damon Hughes vimrc file.
# Updated for Vim9, 2023-04-09
#
# To use it, copy it to ~/.vimrc
# Note: create ~/tmp, ~/.vim, see source commands below.

set nocompatible    # Use Vim defaults (much better!)
filetype plugin on
set magic
set nrformats=

set errorbells
set nomore wrapscan noignorecase noincsearch nohlsearch noshowmatch
set backspace=indent,eol,start

set nosmarttab noexpandtab shiftwidth=8 tabstop=8

set encoding=utf-8 fileencoding=utf-8
set listchars=tab:__,eol:$,nbsp:@

set backup backupdir=~/tmp dir=~/tmp
set viminfo='100,f1,<100

set popt=header:2,number:y  # 2=always

set tw=80       # I use this default, and override it in the autogroups below

# ctrl-] is used by telnet/ssh, so tags are unusable; i use ctrl-j instead.
set tags=./tags;/
map <c-j> <c-]>

# Don't use Ex mode, use Q for formatting
map Q gq

map <Tab> >>
vmap <Tab> >
map <S-Tab> <<
vmap <S-Tab> <

# Always have syntax highlighting on
syntax on

# https://github.com/mr-ubik/vim-hackerman-syntax
# changed:
# let s:colors.cyan         = { 'gui': '#cccccc', 'cterm': 45 } " mdh edit
# let s:colors.blue         = { 'gui': '#406090', 'cterm': 23 } " mdh edit
source $HOME/.vim/syntax/hackerman.vim

set laststatus=2    # 2=always
# %ESC: t=filename, m=modified, r=readonly, y=filetype, q=quickfix, ff=lineending
# =:right side, c=column, l=line, b=buffer, 1*=highlight user1..9, 0=normal
set statusline=\ %t\ %m%r%y%q\ [%{&ff}]\ %=%(c:%02c\ l:%04l\ b:%n\ %)
set termguicolors
hi statusline guibg=darkblue ctermbg=1 guifg=white ctermfg=15
hi statuslinenc guibg=blue ctermbg=9 guifg=white ctermfg=15

hi Todo term=bold guifg=red
# Use `:set guifont=*` to pick a font, then `:set guifont` to find its exact name
set guifont=FiraCode-Regular:h16
if has("gui_macvim")
    set macligatures
    set number
elseif has("gui_gtk")
    set guiligatures
    set number
endif
set guioptions=aAcdeimr
set mousemodel=popup_setpos
set numberwidth=5
set showtabline=2

augroup c
    au!
    autocmd BufRead,BufNewFile *.c set ai tw=0
augroup END

augroup html
    au!
    autocmd BufRead,BufNewFile *.html set tw=0 ai
augroup END

augroup java
    au!
    autocmd BufRead,BufNewFile *.java set tw=0 ai
augroup END

augroup objc
    au!
    autocmd BufRead,BufNewFile *.m,*.h set ai tw=0
augroup END

augroup php
    au!
    autocmd BufRead,BufNewFile *.php,*.inc set tw=0 ai et
augroup END

augroup python
    au!
    autocmd BufRead,BufNewFile *.py set ai tw=0
augroup END

augroup scheme
    au!
    autocmd BufRead,BufNewFile *.sls setf scheme
    autocmd BufRead,BufNewFile *.rkt,*.scm,*.sld,*.sls,*.ss set ai tw=0 sw=4 ts=4
augroup END

Package Managers & Snippets

Next I need a package manager. I’ve settled on vim-plug as complete enough to be useful, not a giant blob, and is maintained. There’s at least 7 or 8 others! Complete madness out there
(I’ve already picked one, I don’t need further advice, and will actively resent you if you give me any. I’m just pointing at the situation being awful.)
Install’s easy, drop it in autoload, mkdir -p ~/.vim/plugged

The first thing I want is a snippet manager, and SnipMate’s the best of those. Edit .vimrc at the end, set your “author” name, it’s used by several snippets.

## .vimrc
call plug#begin()

Plug 'https://github.com/MarcWeber/vim-addon-mw-utils'
Plug 'https://github.com/tomtom/tlib_vim'
Plug 'https://github.com/garbas/vim-snipmate'
Plug 'https://github.com/honza/vim-snippets'

g:snips_author = 'Mark Damon Hughes'
g:snipMate = { 'snippet_version': 1,
        'always_choose_first': 0,
        'description_in_completion': 1,
    }

call plug#end()

Next part’s super annoying. It needs a microsoft shithub account; I made a new one on a throwaway email, but I don’t want rando checkouts using my real name. includeIf lets you choose between multiple config sections, so now I have:

## .gitconfig
[include]
    path = ~/.gitconfig-kami
[includeIf "gitdir:~/Code/"]
    path = ~/.gitconfig-mark

## .gitconfig-kami
[user]
    name = Kamikaze Mark
    email = foo@bar

## .gitconfig-mark
[user]
    name = Mark Damon Hughes
    email = bar@foo

~% git config user.name
Kamikaze Mark
~% cd ~/Code/CodeChez
~/Code/CodeChez% git config user.name
Mark Damon Hughes

But shithub no longer has password logins! FUCK.

~% sudo port install gh
~% gh auth login

Follow the prompts and it creates a key pair in the system keychain. I hate this, but it works (on Mac; Linux install the package however you do, it works the same; Windows you have my condolences).

Now vim, :PlugInstall, and it should read them all. I had to do it a couple times! Then :PlugStatus should show:

Finished. 0 error(s).
[====]

- vim-addon-mw-utils: OK
- vim-snipmate: OK
- vim-snippets: OK
- tlib_vim: OK

Let’s create a snippet!

~% mkdir .vim/snippets

## .vim/snippets/_.snippets
snippet line
    #________________________________________

snippet header
    /* `expand('%:t')`
    * ${1:description}
    * Created `strftime("%Y-%m-%d %H:%M")`
    * Copyright © `strftime("%Y")` ${2:`g:snips_author`}. All Rights Reserved.
    */

And if I make a new file, hit i (insert), line<TAB>, it fills in the snippet! If I type c)<TAB>, it writes a copyright line with my “author” name; it’s highlighted, so hit <ESC> to accept it (help says <CR> should work? But it does not). Basically like any programmer’s editor from this Millennium.

Update 2023-07-24: Added header, which is my standard document header, expand is filename with extension, rest are self-explanatory. Sometimes I add a license, which SnipMate preloads as BSD3, etc.

Use :SnipMateOpenSnippetFiles to see all the defined snippet files.

File Tree

NERDTree seems useful; read the page or :help NERDTree for docs. Add another plugin in .vimrc just before call plug#end(), do a :PlugUpdate, and it’s that easy. But I want to hit a key to toggle the tree, and another key to focus the file, which takes me into the exciting world of vim9 functions.

## ~/.vimrc
Plug 'https://github.com/preservim/nerdtree'

# open/close tree
def g:Nerdtog()
    :NERDTreeToggle
    wincmd p
enddef
nnoremap <F2> :call Nerdtog()<CR>
# focus current file
nnoremap <S-F2> :NERDTreeFind<CR>

Update 2023-04-11: In NERDTree, on a file, hit m for a menu, and you can quicklook, open in Finder, or reveal in Finder, and much more. Doesn’t seem to be a right-click or anything functionality, so it was not immediately obvious how to make it open my image files, etc.

And I think that’s got me up to a baseline modern functionality.