Skip to content

Instantly share code, notes, and snippets.

@kos0ng
Created September 20, 2022 08:44
Show Gist options
  • Save kos0ng/95092381869c0a4d1d1e5e32616434ed to your computer and use it in GitHub Desktop.
Save kos0ng/95092381869c0a4d1d1e5e32616434ed to your computer and use it in GitHub Desktop.
Smali Patch intechfest game #4
.class public Lcom/intechfest/game/GameView;
.super Landroid/view/View;
.source "GameView.java"
# instance fields
.field private m_CirclePaint:Landroid/graphics/Paint;
.field private m_FlagTextPaint:Landroid/graphics/Paint;
.field private m_ScoreTextPaint:Landroid/graphics/Paint;
.field private m_circlePos:[F
.field private m_circleRad:I
.field private m_score:I
# direct methods
.method static constructor <clinit>()V
.registers 1
const-string v0, "game"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
return-void
.end method
.method public constructor <init>(Landroid/content/Context;)V
.registers 6
invoke-direct {p0, p1}, Landroid/view/View;-><init>(Landroid/content/Context;)V
const/4 v0, 0x2
new-array v0, v0, [F
fill-array-data v0, :array_66
iput-object v0, p0, Lcom/intechfest/game/GameView;->m_circlePos:[F
const/16 v0, 0x19
invoke-virtual {p0, v0}, Lcom/intechfest/game/GameView;->scaleSize(I)I
move-result v0
iput v0, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
const/4 v0, 0x0
iput v0, p0, Lcom/intechfest/game/GameView;->m_score:I
new-instance v0, Landroid/graphics/Paint;
invoke-direct {v0}, Landroid/graphics/Paint;-><init>()V
iput-object v0, p0, Lcom/intechfest/game/GameView;->m_CirclePaint:Landroid/graphics/Paint;
const v1, -0xff0100
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V
iget-object v0, p0, Lcom/intechfest/game/GameView;->m_CirclePaint:Landroid/graphics/Paint;
sget-object v1, Landroid/graphics/Paint$Style;->FILL:Landroid/graphics/Paint$Style;
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V
new-instance v0, Landroid/graphics/Paint;
invoke-direct {v0}, Landroid/graphics/Paint;-><init>()V
iput-object v0, p0, Lcom/intechfest/game/GameView;->m_ScoreTextPaint:Landroid/graphics/Paint;
const/high16 v1, -0x10000
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V
iget-object v0, p0, Lcom/intechfest/game/GameView;->m_ScoreTextPaint:Landroid/graphics/Paint;
const/16 v2, 0x14
invoke-virtual {p0, v2}, Lcom/intechfest/game/GameView;->scaleSize(I)I
move-result v3
int-to-float v3, v3
invoke-virtual {v0, v3}, Landroid/graphics/Paint;->setTextSize(F)V
iget-object v0, p0, Lcom/intechfest/game/GameView;->m_ScoreTextPaint:Landroid/graphics/Paint;
sget-object v3, Landroid/graphics/Paint$Align;->CENTER:Landroid/graphics/Paint$Align;
invoke-virtual {v0, v3}, Landroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
new-instance v0, Landroid/graphics/Paint;
invoke-direct {v0}, Landroid/graphics/Paint;-><init>()V
iput-object v0, p0, Lcom/intechfest/game/GameView;->m_FlagTextPaint:Landroid/graphics/Paint;
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V
iget-object v0, p0, Lcom/intechfest/game/GameView;->m_FlagTextPaint:Landroid/graphics/Paint;
invoke-virtual {p0, v2}, Lcom/intechfest/game/GameView;->scaleSize(I)I
move-result v1
int-to-float v1, v1
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setTextSize(F)V
iget-object v0, p0, Lcom/intechfest/game/GameView;->m_FlagTextPaint:Landroid/graphics/Paint;
sget-object v1, Landroid/graphics/Paint$Align;->LEFT:Landroid/graphics/Paint$Align;
invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
return-void
nop
:array_66
.array-data 4
0x0
0x0
.end array-data
.end method
.method public static native getFlag()Ljava/lang/String;
.end method
.method public static native submitScore()V
.end method
# virtual methods
.method drawCircle(Landroid/graphics/Canvas;)V
.registers 8
invoke-static {}, Ljava/lang/Math;->random()D
move-result-wide v0
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getWidth()I
move-result v2
int-to-double v2, v2
mul-double v0, v0, v2
double-to-int v0, v0
invoke-static {}, Ljava/lang/Math;->random()D
move-result-wide v1
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getHeight()I
move-result v3
int-to-double v3, v3
mul-double v1, v1, v3
double-to-int v1, v1
iget v2, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
sub-int v3, v0, v2
if-gez v3, :cond_20
iget v0, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
:cond_20
add-int/2addr v2, v0
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getWidth()I
move-result v3
if-le v2, v3, :cond_2f
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getWidth()I
move-result v2
iget v3, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
sub-int v0, v2, v3
:cond_2f
iget v2, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
sub-int v3, v1, v2
if-gez v3, :cond_37
iget v1, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
:cond_37
add-int/2addr v2, v1
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getHeight()I
move-result v3
if-le v2, v3, :cond_46
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getHeight()I
move-result v2
iget v3, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
sub-int v1, v2, v3
:cond_46
iget-object v2, p0, Lcom/intechfest/game/GameView;->m_circlePos:[F
const/4 v3, 0x0
int-to-float v4, v0
aput v4, v2, v3
const/4 v3, 0x1
int-to-float v4, v1
aput v4, v2, v3
int-to-float v2, v0
int-to-float v3, v1
iget v4, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
int-to-float v4, v4
iget-object v5, p0, Lcom/intechfest/game/GameView;->m_CirclePaint:Landroid/graphics/Paint;
invoke-virtual {p1, v2, v3, v4, v5}, Landroid/graphics/Canvas;->drawCircle(FFFLandroid/graphics/Paint;)V
return-void
.end method
.method protected onDraw(Landroid/graphics/Canvas;)V
.registers 7
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, ""
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v1, p0, Lcom/intechfest/game/GameView;->m_score:I
const/16 v2, 0x2
rsub-int/lit8 v1, v1, 0xa
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, " point(s) left to unlock the flag!"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getWidth()I
move-result v1
div-int/lit8 v1, v1, 0x2
int-to-float v1, v1
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getHeight()I
move-result v3
div-int/lit8 v3, v3, 0x2
int-to-float v3, v3
iget-object v4, p0, Lcom/intechfest/game/GameView;->m_ScoreTextPaint:Landroid/graphics/Paint;
invoke-virtual {p1, v0, v1, v3, v4}, Landroid/graphics/Canvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
invoke-virtual {p0, p1}, Lcom/intechfest/game/GameView;->drawCircle(Landroid/graphics/Canvas;)V
iget v0, p0, Lcom/intechfest/game/GameView;->m_score:I
const/16 v1, 0x2
if-lt v0, v1, :cond_6d
if-ne v0, v2, :cond_6a
const/4 v0, 0x0
:try_start_3b
invoke-static {}, Lcom/intechfest/game/GameView;->getFlag()Ljava/lang/String;
move-result-object v1
:try_end_3f
.catch Ljava/lang/Exception; {:try_start_3b .. :try_end_3f} :catch_41
move-object v0, v1
goto :goto_45
:catch_41
move-exception v1
invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
:goto_45
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getWidth()I
move-result v1
int-to-float v1, v1
iget-object v2, p0, Lcom/intechfest/game/GameView;->m_FlagTextPaint:Landroid/graphics/Paint;
invoke-virtual {v2, v0}, Landroid/graphics/Paint;->measureText(Ljava/lang/String;)F
move-result v2
const v3, 0x3e4ccccd # 0.2f
mul-float v2, v2, v3
sub-float/2addr v1, v2
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getHeight()I
move-result v2
div-int/lit8 v2, v2, 0x2
const/16 v3, 0x32
invoke-virtual {p0, v3}, Lcom/intechfest/game/GameView;->scaleSize(I)I
move-result v3
add-int/2addr v2, v3
int-to-float v2, v2
iget-object v3, p0, Lcom/intechfest/game/GameView;->m_FlagTextPaint:Landroid/graphics/Paint;
invoke-virtual {p1, v0, v1, v2, v3}, Landroid/graphics/Canvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
goto :goto_6d
:cond_6a
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->invalidate()V
:cond_6d
:goto_6d
return-void
.end method
.method public onTouchEvent(Landroid/view/MotionEvent;)Z
.registers 9
iget v0, p0, Lcom/intechfest/game/GameView;->m_score:I
const/4 v1, 0x0
const/16 v2, 0xa
if-lt v0, v2, :cond_8
return v1
:cond_8
invoke-virtual {p1}, Landroid/view/MotionEvent;->getX()F
move-result v0
float-to-int v0, v0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getY()F
move-result v2
float-to-int v2, v2
int-to-float v3, v0
iget-object v4, p0, Lcom/intechfest/game/GameView;->m_circlePos:[F
aget v5, v4, v1
sub-float/2addr v3, v5
int-to-float v5, v0
aget v1, v4, v1
sub-float/2addr v5, v1
mul-float v3, v3, v5
int-to-float v1, v2
const/4 v5, 0x1
aget v6, v4, v5
sub-float/2addr v1, v6
int-to-float v6, v2
aget v4, v4, v5
sub-float/2addr v6, v4
mul-float v1, v1, v6
add-float/2addr v3, v1
iget v1, p0, Lcom/intechfest/game/GameView;->m_circleRad:I
mul-int v1, v1, v1
int-to-float v1, v1
cmpg-float v1, v3, v1
if-gez v1, :cond_43
iget v1, p0, Lcom/intechfest/game/GameView;->m_score:I
add-int/2addr v1, v5
iput v1, p0, Lcom/intechfest/game/GameView;->m_score:I
:try_start_38
invoke-static {}, Lcom/intechfest/game/GameView;->submitScore()V
invoke-static {}, Lcom/intechfest/game/GameView;->submitScore()V
invoke-static {}, Lcom/intechfest/game/GameView;->submitScore()V
invoke-static {}, Lcom/intechfest/game/GameView;->submitScore()V
invoke-static {}, Lcom/intechfest/game/GameView;->submitScore()V
:try_end_3b
.catch Ljava/lang/Exception; {:try_start_38 .. :try_end_3b} :catch_3c
goto :goto_40
:catch_3c
move-exception v1
invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
:goto_40
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->invalidate()V
:cond_43
invoke-super {p0, p1}, Landroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z
move-result v1
return v1
.end method
.method scaleSize(I)I
.registers 4
int-to-float v0, p1
invoke-virtual {p0}, Lcom/intechfest/game/GameView;->getResources()Landroid/content/res/Resources;
move-result-object v1
invoke-virtual {v1}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
move-result-object v1
iget v1, v1, Landroid/util/DisplayMetrics;->density:F
mul-float v0, v0, v1
float-to-int v0, v0
return v0
.end method
@as3ng
Copy link

as3ng commented Sep 21, 2022

GG!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment