Houkago no Love Beat

Houkago no Love Beat (放課後のLove Beat, After School Love Beat) is a Japanese-only PlayStation 2 otome game (also referred to as GxB games) released on June 10, 2004. A notable feature of the game is the integration of real J-pop songs into the gameplay, and the ability to watch and listen to the songs again once you have mastered them in-game, as well as the fact that the main character has a voice (many otome games' main characters are not voice acted). The publisher classifies it as a 'love adventure' (恋愛アドベンチャー, Renai Adobenchā) game.

Developer(s)HuneX
Publisher(s)D3 Publisher
Platform(s)PlayStation 2
Release
  • JP: June 10, 2004
Simple 2000 Series Ultimate Vol. 27: Houkago no Love Beat
  • JP: October 6, 2005
Genre(s)Otome game
Mode(s)Single player

Gameplay

There are two main elements to the gameplay of Houkago no Love Beat. The narrative element involves the main character having conversations with other characters, making choices that affect the storyline. The 'live part' is a minigame where the player uses the PS2 controller to affect the performance of the band during various songs. If the player does a good job, the song is performed well, and if the player misses a lot of cues, the band performs badly. This in turn affects how well the band is received, whether they get a contract, etc.

Plot

The main character is a high school girl trained in classical piano who has just transferred to a new high school, Aobadai Gakuen. On her first day, she gets lost and meets 4 boys there who are secretly practising as a band. She eventually becomes the songwriter for the band, using her classical background to create fresh melodies for the band to build on.

There's a rival band, Kamui, that also plays a couple songs during the game and provides some plot devices regarding a big band contest with a recording contract as the prize.

Characters

  • Main character: High school girl, her default name is Ruka Hibiki but it can be changed. Voice actor: Masano Hosono
  • Kaito Momose: The band's singer. Voice actor: Akira Ishida
  • Itsuki Tsukuwano: The band's bassist. Voice actor: Daisuke Ono
  • Keisuke Hijirinaka: The band's guitarist. Voice actor: Tomohiro Tsuboi
  • Kurusu Tenjou: The band's drummer. Voice actor: Takahiro Kawanago
  • Kaoru Himuro: Kamui's vocalist. Voice actor: Kenno Kase
  • Akira Himuro: Kamui's guitarist. Voice actor: Kazumi Tsuruda
gollark: I didn't do any horrible homoglyph hacks with THAT.
gollark: It uses the function, yes.
gollark: So, I finished that to highly dubious demand. I'd like to know how #11 and such work.
gollark: > `x = _(int(0, e), int(e, е))`You may note that this would produce slices of 0 size. However, one of the `e`s is a homoglyph; it contains `2 * e`.`return Result[0][0], x, m@set({int(e, 0), int(е, e)}), w`From this, it's fairly obvious what `strassen` *really* does - partition `m1` into 4 block matrices of half (rounded up to the nearest power of 2) size.> `E = typing(lookup[2])`I forgot what this is meant to contain. It probably isn't important.> `def exponentiate(m1, m2):`This is the actual multiplication bit.> `if m1.n == 1: return Mаtrix([[m1.bigData[0] * m2.bigData[0]]])`Recursion base case. 1-sized matrices are merely multiplied scalarly.> `aa, ab, ac, ad = strassen(m1)`> `аa, аb, аc, аd = strassen(m2)`More use of homoglyph confusion here. The matrices are quartered.> `m = m1.subtract(exponentiate(aa, аa) ** exponentiate(ab, аc), exponentiate(aa, аb) ** exponentiate(ab, аd), exponentiate(ac, аa) ** exponentiate(ad, аc), exponentiate(ac, аb) ** exponentiate(ad, аd)) @ [-0j, int.abs(m2.n * 3, m1.n)]`This does matrix multiplication in an inefficient *recursive* way; the Strassen algorithm could save one of eight multiplications here, which is more efficient (on big matrices). It also removes the zero padding.> `m = exponentiate(Mаtrix(m1), Mаtrix(m2)) @ (0j * math.sin(math.asin(math.sin(math.asin(math.sin(math.e))))), int(len(m1), len(m1)))`This multiples them and I think also removes the zero padding again, as we want it to be really very removed.> `i += 1`This was added as a counter used to ensure that it was usably performant during development.> `math.factorial = math.sinh`Unfortunately, Python's factorial function has really rather restrictive size limits.> `for row in range(m.n):`This converts back into the 2D array format.> `for performance in sorted(dir(gc)): getattr(gc, performance)()`Do random fun things to the GC.
gollark: > `globals()[Row + Row] = random.randint(*sys.version_info[:2])`Never actually got used anywhere.> `ε = sys.float_info.epsilon`Also not used. I just like epsilons.> `def __exit__(self, _, _________, _______):`This is also empty, because cleaning up the `_` global would be silly. It'll be overwritten anyway. This does serve a purpose, however, and not just in making it usable as a context manager. This actually swallows all errors, which is used in some places.> `def __pow__(self, m2):`As ever, this is not actual exponentiation. `for i, (ι, 𐌉) in enumerate(zip(self.bigData, m2.bigData)): e.bigData[i] = ι + 𐌉` is in fact just plain and simple addition of two matrices.> `def subtract(forth, 𝕒, polynomial, c, vector_space):`This just merges 4 submatrices back into one matrix.> `with out as out, out, forth:`Apart from capturing the exceptions, this doesn't really do much either. The `_` provided by the context manager is not used.> `_(0j, int(0, 𝕒.n))`Yes, it's used in this line. However, this doesn't actually have any effect whatsoever on the execution of this. So I ignore it. It was merely a distraction.> `with Mаtrix(ℤ(ℤ(4))):`It is used again to swallow exceptions. After this is just some fluff again.> `def strassen(m, x= 3.1415935258989):`This is an interesting part. Despite being called `strassen`, it does not actually implement the Strassen algorithm, which is a somewhat more efficient way to multiply matrices than the naive way used in - as far as I can tell - every entry.> `e = 2 ** (math.ceil(math.log2(m.n)) - 1)`This gets the next power of two in a fairly obvious way. It is used to pad out the matrix to the next power of 2 size.> `with m:`The context manager is used again for nicer lookups.> `Result[0] += [_(0j, int(e, e))]`Weird pythonoquirkiness again. You can append to lists in tuples with `+=`, but it throws an exception as they're sort of immutable.> `typing(lookup[4])(input())`It's entirely possible that this does things.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.