Remove Some Japanese Text Grammar Functions - pret/pokered GitHub Wiki

UPDATE: As of Jan. 17, 2026, the move grammar functions are stored and labeled differently in the decomp. The old method will be preserved below the more up-to-date method, to benefit those using older revisions.

Code originally by JoJoBear13 (in ShinPokered)

METHOD 1

data\text\text_2.asm:

...
-_UsedMove1Text::
-	text_start
-	line "used @"
-	text_end
-
-_UsedMove2Text::
+_UsedMoveText::
	text_start
	line "used @"
	text_end
...
...
-_EndUsedMove1Text::
-	text "!"
-	done
-
-_EndUsedMove2Text::
-	text "!"
-	done
-
-_EndUsedMove3Text::
-	text "!"
-	done
-
-_EndUsedMove4Text::
-	text "!"
-	done
-
-_EndUsedMove5Text::
+_EndUsedMoveText::
	text "!"
	done
...
...
-_UnaffectedText::
-	text "<TARGET>'s"
-	line "unaffected!"
-	prompt
...

engine/battle/used_move_text.asm

DisplayUsedMoveText:
	ld hl, UsedMoveText
	jp PrintText

UsedMoveText:
	text_far _ActorNameText
	text_asm

	ldh a, [hWhoseTurn]
	and a
	ld a, [wPlayerMoveNum]
	ld hl, wPlayerUsedMove
	jr z, .playerTurn

	ld a, [wEnemyMoveNum]
	ld hl, wEnemyUsedMove

.playerTurn
	ld [hl], a
	ld [wMoveGrammar], a
-	call GetMoveGrammar
-	ld a, [wMonIsDisobedient]
-	and a
-	ld hl, UsedMove2Text
-	ret nz
-
-	; check move grammar
-	ld a, [wMoveGrammar]
-	cp $3
-	ld hl, UsedMove2Text
-	ret c
-	ld hl, UsedMove1Text
+	ld hl, MonUsedMoveText
	ret

-UsedMove1Text:
-	text_far _UsedMove1Text
-	text_asm
-	jr UsedMoveText_CheckObedience
-
-UsedMove2Text:
-	text_far _UsedMove2Text
+MonUsedMoveText:
+	text_far _UsedMoveText
	text_asm
	; fall through

UsedMoveText_CheckObedience:
; check obedience
	ld a, [wMonIsDisobedient]
	and a
	jr z, .GetMoveNameText
; print "instead,"
	ld hl, .UsedInsteadText
	ret

.UsedInsteadText:
	text_far _UsedInsteadText
	text_asm
	; fall through

.GetMoveNameText:
	ld hl, MoveNameText
	ret

MoveNameText:
	text_far _MoveNameText
	text_asm
-	ld hl, .endusedmovetexts
-	ld a, [wMoveGrammar]
-	add a
-	push bc
-	ld b, $0
-	ld c, a
-	add hl, bc
-	pop bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
+	ld hl, EndUsedMoveText
	ret

+EndUsedMoveText:
+	text_far _EndUsedMoveText
+	text_end
-
-.endusedmovetexts:
-; entries correspond to MoveGrammar sets
-	dw EndUsedMove1Text
-	dw EndUsedMove2Text
-	dw EndUsedMove3Text
-	dw EndUsedMove4Text
-	dw EndUsedMove5Text
-
-EndUsedMove1Text:
-	text_far _EndUsedMove1Text
-	text_end
-
-EndUsedMove2Text:
-	text_far _EndUsedMove2Text
-	text_end
-
-EndUsedMove3Text:
-	text_far _EndUsedMove3Text
-	text_end
-
-EndUsedMove4Text:
-	text_far _EndUsedMove4Text
-	text_end
-
-EndUsedMove5Text:
-	text_far _EndUsedMove5Text
-	text_end
-
-; This function is redundant in the English localization.
-; In Japanese, it selects one of 5 distinct sentence structures.
-; In English, all of these sentences have the exact same structure,
-; so this serves no purpose.
-GetMoveGrammar:
-	push bc
-	ld a, [wMoveGrammar] ; move ID
-	ld c, a
-	ld b, $0
-	ld hl, MoveGrammar
-.loop
-	ld a, [hli]
-; end of table?
-	cp -1
-	jr z, .end
-; match?
-	cp c
-	jr z, .end
-; advance grammar type at 0
-	and a
-	jr nz, .loop
-; next grammar type
-	inc b
-	jr .loop
-
-.end
-; wMoveGrammar now contains move grammar
-	ld a, b
-	ld [wMoveGrammar], a
-	pop bc
-	ret
-
-INCLUDE "data/moves/grammar.asm"

engine\battle\core.asm:

PrintMoveFailureText:
	ld de, wPlayerMoveEffect
	ldh a, [hWhoseTurn]
	and a
	jr z, .playersTurn
	ld de, wEnemyMoveEffect
.playersTurn
	ld hl, DoesntAffectMonText
	ld a, [wDamageMultipliers]
	and EFFECTIVENESS_MASK
	jr z, .gotTextToPrint
	ld hl, AttackMissedText
	ld a, [wCriticalHitOrOHKO]
	cp $ff
	jr nz, .gotTextToPrint
-	ld hl, UnaffectedText
+	ld hl, DoesntAffectMonText
.gotTextToPrint
	push de
	call PrintText
	xor a
	ld [wCriticalHitOrOHKO], a
	pop de
	ld a, [de]
	cp JUMP_KICK_EFFECT
	ret nz
...
...
-UnaffectedText:
-	text_far _UnaffectedText
-	text_end
...

You can now delete the file data\moves\grammar.asm.


METHOD 2

data\text\text_2.asm:

...
-_Used1Text::
-	text_start
-	line "used @"
-	text_end

-_Used2Text::
-	text_start
-	line "used @"
-	text_end
+_UsedText::
+	text_start
+	line "used @"
+	text_end
...
...
-_ExclamationPoint1Text::
-	text "!"
-	done

-_ExclamationPoint2Text::
-	text "!"
-	done

-_ExclamationPoint3Text::
-	text "!"
-	done

-_ExclamationPoint4Text::
-	text "!"
-	done

-_ExclamationPoint5Text::
-	text "!"
-	done
+_ExclamationPointText::
+	text "!"
+	done
...
...
-_UnaffectedText::
-	text "<TARGET>'s"
-	line "unaffected!"
-	prompt
...

engine\battle\core.asm:

...
-; this function wastes time calling DetermineExclamationPointTextNum
-; and choosing between Used1Text and Used2Text, even though
-; those text strings are identical and both continue at PrintInsteadText
-; this likely had to do with Japanese grammar that got translated,
-; but the functionality didn't get removed
MonName1Text:
	text_far _MonName1Text
	text_asm
	ldh a, [hWhoseTurn]
	and a
	ld a, [wPlayerMoveNum]
	ld hl, wPlayerUsedMove
	jr z, .playerTurn
	ld a, [wEnemyMoveNum]
	ld hl, wEnemyUsedMove
.playerTurn
	ld [hl], a
	ld [wd11e], a
-	call DetermineExclamationPointTextNum
-	ld a, [wMonIsDisobedient]
-	and a
-	ld hl, Used2Text
-	ret nz
-	ld a, [wd11e]
-	cp 3
-	ld hl, Used2Text
-	ret c
-	ld hl, Used1Text
+       ld hl, UsedText
	ret

-Used1Text:
-	text_far _Used1Text
-	text_asm
-	jr PrintInsteadText

-Used2Text:
-	text_far _Used2Text
-	text_asm
-	; fall through
+UsedText:
+	text_far _UsedText
+	text_asm
+	; fall through
...
...
PrintMoveName:
	ld hl, _PrintMoveName
	ret

_PrintMoveName:
	text_far _MoveNameText
	text_asm
-	ld hl, ExclamationPointPointerTable
-	ld a, [wd11e] ; exclamation point num
-	add a
-	push bc
-	ld b, $0
-	ld c, a
-	add hl, bc
-	pop bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ret
+	ld hl, ExclamationPointText
+	ret

+ExclamationPointText:
+	text_far _ExclamationPointText
+	text_end
+	ret

-ExclamationPointPointerTable:
-	dw ExclamationPoint1Text
-	dw ExclamationPoint2Text
-	dw ExclamationPoint3Text
-	dw ExclamationPoint4Text
-	dw ExclamationPoint5Text

-ExclamationPoint1Text:
-	text_far _ExclamationPoint1Text
-	text_end

-ExclamationPoint2Text:
-	text_far _ExclamationPoint2Text
-	text_end

-ExclamationPoint3Text:
-	text_far _ExclamationPoint3Text
-	text_end

-ExclamationPoint4Text:
-	text_far _ExclamationPoint4Text
-	text_end

-ExclamationPoint5Text:
-	text_far _ExclamationPoint5Text
-	text_end

-; this function does nothing useful
-; if the move being used is in set [1-4] from ExclamationPointMoveSets,
-; use ExclamationPoint[1-4]Text
-; otherwise, use ExclamationPoint5Text
-; but all five text strings are identical
-; this likely had to do with Japanese grammar that got translated,
-; but the functionality didn't get removed
-DetermineExclamationPointTextNum:
-	push bc
-	ld a, [wd11e] ; move ID
-	ld c, a
-	ld b, $0
-	ld hl, ExclamationPointMoveSets
-.loop
-	ld a, [hli]
-	cp $ff
-	jr z, .done
-	cp c
-	jr z, .done
-	and a
-	jr nz, .loop
-	inc b
-	jr .loop
-.done
-	ld a, b
-	ld [wd11e], a ; exclamation point num
-	pop bc
-	ret

-INCLUDE "data/moves/grammar.asm"

PrintMoveFailureText:
	ld de, wPlayerMoveEffect
	ldh a, [hWhoseTurn]
	and a
	jr z, .playersTurn
	ld de, wEnemyMoveEffect
.playersTurn
	ld hl, DoesntAffectMonText
	ld a, [wDamageMultipliers]
	and $7f
	jr z, .gotTextToPrint
	ld hl, AttackMissedText
	ld a, [wCriticalHitOrOHKO]
	cp $ff
	jr nz, .gotTextToPrint
-	ld hl, UnaffectedText
+       ld hl, IsUnaffectedText
.gotTextToPrint
	push de
	call PrintText
	xor a
	ld [wCriticalHitOrOHKO], a
	pop de
	ld a, [de]
	cp JUMP_KICK_EFFECT
	ret nz
...
...
-UnaffectedText:
-	text_far _UnaffectedText
-	text_end
...

delete data\moves\grammar.asm.

⚠️ **GitHub.com Fallback** ⚠️