Same pair, store instead of load
Writing a global is the mirror image of reading one: lui builds the upper half of the address, and the %lo half rides on a store. Here's stashScore(pts), which assigns its argument to the global gScore:
lui at, %hi(gScore) # upper half of gScore's address
sw a0, %lo(gScore)(at) # store the argument into it
jr ra
nop
One difference from the read: the address lands in at, the assembler temporary, not v0 — there's no return value here, so the compiler grabs its designated scratch register. The value being written sits in the first operand of the sw; the where is the %lo pair. Read every global store as "what goes into which name".
The target also writes one global — but check the first sw operand carefully before assuming it's an argument. You know a register that always holds something.
Your task
extern s32 gCombo; is declared for you. Write func_80374150 to reproduce the target assembly.