mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-14 09:59:09 +03:00
Added get_pause
This commit is contained in:
+1
-1
@@ -2744,7 +2744,7 @@ bool TaskEffectLitproj::init() {
|
||||
}
|
||||
|
||||
bool TaskEffectLitproj::ctrl() {
|
||||
if (!stage_param_data_litproj_current)
|
||||
if (!stage_param_data_litproj_current || get_pause())
|
||||
return false;
|
||||
|
||||
light_data& light = rctx_ptr->light_set[LIGHT_SET_MAIN].lights[LIGHT_PROJECTION];
|
||||
|
||||
+16
-10
@@ -616,17 +616,22 @@ render_context::~render_context() {
|
||||
}
|
||||
|
||||
void render_context::ctrl() {
|
||||
delta_frame_history += get_delta_frame();
|
||||
float_t v1;
|
||||
delta_frame_history = modff(delta_frame_history, &v1);
|
||||
delta_frame_history_int = (int32_t)v1;
|
||||
if (delta_frame_history < 0.001f)
|
||||
delta_frame_history = 0.0f;
|
||||
else if (1.0f - delta_frame_history < 0.001f)
|
||||
delta_frame_history_int++;
|
||||
if (!get_pause()) {
|
||||
delta_frame_history += get_delta_frame();
|
||||
float_t mod;
|
||||
delta_frame_history = modff(delta_frame_history, &mod);
|
||||
delta_frame_history_int = (int32_t)mod;
|
||||
if (delta_frame_history < 0.001f)
|
||||
delta_frame_history = 0.0f;
|
||||
else if (1.0f - delta_frame_history < 0.001f)
|
||||
delta_frame_history_int++;
|
||||
}
|
||||
|
||||
rctx_ptr = this;
|
||||
app::TaskWork::ctrl();
|
||||
|
||||
extern bool game_state_get_pause();
|
||||
if (!get_pause() || !game_state_get_pause())
|
||||
app::TaskWork::ctrl();
|
||||
sound_ctrl();
|
||||
file_handler_storage_ctrl();
|
||||
}
|
||||
@@ -650,7 +655,8 @@ void render_context::disp() {
|
||||
render.lens_flare_texture = 0;
|
||||
render.aet_back = 0;
|
||||
render_manager->field_31C = false;
|
||||
app::TaskWork::basic();
|
||||
if (!get_pause())
|
||||
app::TaskWork::basic();
|
||||
}
|
||||
|
||||
void render_context::free() {
|
||||
|
||||
@@ -3048,7 +3048,7 @@ static void sub_140218560(RobCloth* rob_cls, float_t step, bool a3) {
|
||||
}
|
||||
}
|
||||
|
||||
if (step > 0.0f) {
|
||||
if (step > 0.0f && !get_pause()) {
|
||||
sub_1402187D0(rob_cls, a3);
|
||||
sub_140219D10(rob_cls);
|
||||
sub_14021AA60(rob_cls, step, false);
|
||||
@@ -3442,7 +3442,7 @@ static void sub_14047C800(RobOsage* rob_osg, const mat4* root_matrix,
|
||||
mat4_transform_vector(&v130, &v113, &v128);
|
||||
|
||||
float_t v25 = parent_scale->x;
|
||||
if (!rob_osg->osage_reset && step <= 0.0f)
|
||||
if (!rob_osg->osage_reset && (get_pause() || step <= 0.0f))
|
||||
return;
|
||||
|
||||
bool stiffness = rob_osg->skin_param_ptr->stiffness > 0.0f;
|
||||
@@ -3724,7 +3724,7 @@ static void sub_140482F30(vec3* pos1, vec3* pos2, float_t length) {
|
||||
|
||||
static void sub_14047D8C0(RobOsage* rob_osg, const mat4* root_matrix,
|
||||
const vec3* parent_scale, float_t step, bool a5) {
|
||||
if (!rob_osg->osage_reset && step <= 0.0f)
|
||||
if (!rob_osg->osage_reset && (get_pause() || step <= 0.0f))
|
||||
return;
|
||||
|
||||
OsageCollision::Work* coli = rob_osg->coli;
|
||||
@@ -3865,7 +3865,7 @@ static void sub_14047C770(RobOsage* rob_osg, const mat4* root_matrix,
|
||||
}
|
||||
|
||||
static void sub_14047D620(RobOsage* rob_osg, float_t step) {
|
||||
if (step < 0.0f && rob_osg->disable_collision)
|
||||
if (get_pause() || step <= 0.0f || rob_osg->disable_collision)
|
||||
return;
|
||||
|
||||
std::vector<RobOsageNode>& nodes = rob_osg->nodes;
|
||||
@@ -3898,7 +3898,7 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) {
|
||||
}
|
||||
|
||||
static void sub_14047ECA0(RobOsage* rob_osg, float_t step) {
|
||||
if (step <= 0.0f)
|
||||
if (get_pause() || step <= 0.0f)
|
||||
return;
|
||||
|
||||
OsageCollision::Work* coli_ring = rob_osg->coli_ring;
|
||||
|
||||
@@ -16,6 +16,8 @@ bool sv_anisotropy_changed = false;
|
||||
int32_t sv_old_anisotropy = 1;
|
||||
int32_t sv_anisotropy = 1;
|
||||
|
||||
bool pause = false;
|
||||
|
||||
size_t frame_counter = 0;
|
||||
|
||||
bool select_frame_speed = false;
|
||||
@@ -65,6 +67,10 @@ uint32_t get_frame_counter() {
|
||||
return (uint32_t)frame_counter;
|
||||
}
|
||||
|
||||
bool get_pause() {
|
||||
return pause;
|
||||
}
|
||||
|
||||
float_t get_target_anim_fps() {
|
||||
return target_anim_fps;
|
||||
}
|
||||
|
||||
@@ -121,5 +121,6 @@ extern void sv_anisotropy_set(int32_t value);
|
||||
extern float_t get_anim_frame_speed();
|
||||
extern float_t get_delta_frame();
|
||||
extern uint32_t get_frame_counter();
|
||||
extern bool get_pause();
|
||||
extern float_t get_target_anim_fps();
|
||||
extern void uniform_value_reset();
|
||||
|
||||
@@ -878,6 +878,8 @@ void DataTestMotA3d::Sync1pFrame() {
|
||||
return;
|
||||
|
||||
float_t frame = dtm_mot_array->GetFrame();
|
||||
if (get_pause())
|
||||
frame -= dtm_mot_array->GetStep();
|
||||
|
||||
for (auth_3d_id& i : auth_3d_ids)
|
||||
i.set_req_frame(frame);
|
||||
@@ -1171,6 +1173,8 @@ bool DtmMot::ctrl() {
|
||||
state = 7;
|
||||
break;
|
||||
}
|
||||
else if (get_pause())
|
||||
break;
|
||||
|
||||
rob_chara* rob_chr = rob_chara_array_get(chara_id);
|
||||
|
||||
|
||||
@@ -3406,6 +3406,9 @@ void struc_751::sub_140300A10() {
|
||||
|
||||
if (key_input[1])
|
||||
key_input[1] |= 0x40000000;
|
||||
|
||||
if (get_pause())
|
||||
key_input[1] |= 0x10000000;
|
||||
}
|
||||
|
||||
void struc_751::sub_1403011A0() {
|
||||
|
||||
+57
-49
@@ -380,7 +380,7 @@ struct GameStateData {
|
||||
|
||||
struct SubGameStateData {
|
||||
SubGameStateEnum sub_game_state;
|
||||
int32_t field_4;
|
||||
bool pause;
|
||||
bool(*Init)();
|
||||
bool(*Ctrl)();
|
||||
bool(*Dest)();
|
||||
@@ -529,287 +529,287 @@ GameStateData game_state_data_array[] = {
|
||||
SubGameStateData sub_game_state_data_array[] = {
|
||||
{
|
||||
SUB_GAME_STATE_DATA_INITIALIZE,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataInitialize::Init,
|
||||
SubGameState::DataInitialize::Ctrl,
|
||||
SubGameState::DataInitialize::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SYSTEM_STARTUP,
|
||||
1,
|
||||
true,
|
||||
SubGameState::SystemStartup::Init,
|
||||
SubGameState::SystemStartup::Ctrl,
|
||||
SubGameState::SystemStartup::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SYSTEM_STARTUP_ERROR,
|
||||
1,
|
||||
true,
|
||||
SubGameState::SystemStartupError::Init,
|
||||
SubGameState::SystemStartupError::Ctrl,
|
||||
SubGameState::SystemStartupError::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_WARNING,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Warning::Init,
|
||||
SubGameState::Warning::Ctrl,
|
||||
SubGameState::Warning::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_LOGO,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Logo::Init,
|
||||
SubGameState::Logo::Ctrl,
|
||||
SubGameState::Logo::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_RATING,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Rating::Init,
|
||||
SubGameState::Rating::Ctrl,
|
||||
SubGameState::Rating::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DEMO,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Demo::Init,
|
||||
SubGameState::Demo::Ctrl,
|
||||
SubGameState::Demo::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_TITLE,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Title::Init,
|
||||
SubGameState::Title::Ctrl,
|
||||
SubGameState::Title::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_RANKING,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Ranking::Init,
|
||||
SubGameState::Ranking::Ctrl,
|
||||
SubGameState::Ranking::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SCORE_RANKING,
|
||||
1,
|
||||
true,
|
||||
SubGameState::ScoreRanking::Init,
|
||||
SubGameState::ScoreRanking::Ctrl,
|
||||
SubGameState::ScoreRanking::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_CM,
|
||||
1,
|
||||
true,
|
||||
SubGameState::CM::Init,
|
||||
SubGameState::CM::Ctrl,
|
||||
SubGameState::CM::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_PHOTO_MODE_DEMO,
|
||||
1,
|
||||
true,
|
||||
SubGameState::PhotoModeDemo::Init,
|
||||
SubGameState::PhotoModeDemo::Ctrl,
|
||||
SubGameState::PhotoModeDemo::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SELECTOR,
|
||||
1,
|
||||
true,
|
||||
SubGameState::Selector::Init,
|
||||
SubGameState::Selector::Ctrl,
|
||||
SubGameState::Selector::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_GAME_MAIN,
|
||||
1,
|
||||
true,
|
||||
SubGameState::GameMain::Init,
|
||||
SubGameState::GameMain::Ctrl,
|
||||
SubGameState::GameMain::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_GAME_SEL,
|
||||
1,
|
||||
true,
|
||||
SubGameState::GameSel::Init,
|
||||
SubGameState::GameSel::Ctrl,
|
||||
SubGameState::GameSel::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_STAGE_RESULT,
|
||||
1,
|
||||
true,
|
||||
SubGameState::StageResult::Init,
|
||||
SubGameState::StageResult::Ctrl,
|
||||
SubGameState::StageResult::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SCREEN_SHOT_SEL,
|
||||
1,
|
||||
true,
|
||||
SubGameState::ScreenShotSel::Init,
|
||||
SubGameState::ScreenShotSel::Ctrl,
|
||||
SubGameState::ScreenShotSel::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_SCREEN_SHOT_RESULT,
|
||||
1,
|
||||
true,
|
||||
SubGameState::ScreenShotResult::Init,
|
||||
SubGameState::ScreenShotResult::Ctrl,
|
||||
SubGameState::ScreenShotResult::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_GAME_OVER,
|
||||
1,
|
||||
true,
|
||||
SubGameState::GameOver::Init,
|
||||
SubGameState::GameOver::Ctrl,
|
||||
SubGameState::GameOver::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_MAIN,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestMain::Init,
|
||||
SubGameState::DataTestMain::Ctrl,
|
||||
SubGameState::DataTestMain::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_MISC,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestMisc::Init,
|
||||
SubGameState::DataTestMisc::Ctrl,
|
||||
SubGameState::DataTestMisc::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_OBJ,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataTestObj::Init,
|
||||
SubGameState::DataTestObj::Ctrl,
|
||||
SubGameState::DataTestObj::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_STG,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataTestStg::Init,
|
||||
SubGameState::DataTestStg::Ctrl,
|
||||
SubGameState::DataTestStg::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_MOT,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataTestMot::Init,
|
||||
SubGameState::DataTestMot::Ctrl,
|
||||
SubGameState::DataTestMot::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_COLLISION,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestCollision::Init,
|
||||
SubGameState::DataTestCollision::Ctrl,
|
||||
SubGameState::DataTestCollision::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_SPR,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestSpr::Init,
|
||||
SubGameState::DataTestSpr::Ctrl,
|
||||
SubGameState::DataTestSpr::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_AET,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestAet::Init,
|
||||
SubGameState::DataTestAet::Ctrl,
|
||||
SubGameState::DataTestAet::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_AUTH_3D,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestAuth3d::Init,
|
||||
SubGameState::DataTestAuth3d::Ctrl,
|
||||
SubGameState::DataTestAuth3d::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_CHR,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestChr::Init,
|
||||
SubGameState::DataTestChr::Ctrl,
|
||||
SubGameState::DataTestChr::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_ITEM,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestItem::Init,
|
||||
SubGameState::DataTestItem::Ctrl,
|
||||
SubGameState::DataTestItem::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_PERF,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestPerf::Init,
|
||||
SubGameState::DataTestPerf::Ctrl,
|
||||
SubGameState::DataTestPerf::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_PVSCRIPT,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestPvScript::Init,
|
||||
SubGameState::DataTestPvScript::Ctrl,
|
||||
SubGameState::DataTestPvScript::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_PRINT,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestPrint::Init,
|
||||
SubGameState::DataTestPrint::Ctrl,
|
||||
SubGameState::DataTestPrint::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_CARD,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestCard::Init,
|
||||
SubGameState::DataTestCard::Ctrl,
|
||||
SubGameState::DataTestCard::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_OPD,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestOpd::Init,
|
||||
SubGameState::DataTestOpd::Ctrl,
|
||||
SubGameState::DataTestOpd::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_SLIDER,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestSlider::Init,
|
||||
SubGameState::DataTestSlider::Ctrl,
|
||||
SubGameState::DataTestSlider::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_GLITTER,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestGlitter::Init,
|
||||
SubGameState::DataTestGlitter::Ctrl,
|
||||
SubGameState::DataTestGlitter::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_GRAPHICS,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestGraphics::Init,
|
||||
SubGameState::DataTestGraphics::Ctrl,
|
||||
SubGameState::DataTestGraphics::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_DATA_TEST_COLLECTION_CARD,
|
||||
1,
|
||||
true,
|
||||
SubGameState::DataTestCollectionCard::Init,
|
||||
SubGameState::DataTestCollectionCard::Ctrl,
|
||||
SubGameState::DataTestCollectionCard::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_TEST_MODE_MAIN,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataTestModeMain::Init,
|
||||
SubGameState::DataTestModeMain::Ctrl,
|
||||
SubGameState::DataTestModeMain::Dest,
|
||||
},
|
||||
{
|
||||
SUB_GAME_STATE_APP_ERROR,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataTestAppError::Init,
|
||||
SubGameState::DataTestAppError::Ctrl,
|
||||
SubGameState::DataTestAppError::Dest,
|
||||
@@ -818,7 +818,7 @@ SubGameStateData sub_game_state_data_array[] = {
|
||||
#if defined(ReDIVA_DEV)
|
||||
{ // Added
|
||||
SUB_GAME_STATE_GLITTER_EDITOR,
|
||||
0,
|
||||
false,
|
||||
SubGameState::GlitterEditor::Init,
|
||||
SubGameState::GlitterEditor::Ctrl,
|
||||
SubGameState::GlitterEditor::Dest,
|
||||
@@ -827,7 +827,7 @@ SubGameStateData sub_game_state_data_array[] = {
|
||||
#if DATA_EDIT
|
||||
{ // Added
|
||||
SUB_GAME_STATE_DATA_EDIT,
|
||||
0,
|
||||
false,
|
||||
SubGameState::DataEdit::Init,
|
||||
SubGameState::DataEdit::Ctrl,
|
||||
SubGameState::DataEdit::Dest,
|
||||
@@ -1948,6 +1948,14 @@ GameStateEnum game_state_get_game_state() {
|
||||
return game_state_get()->game_state;
|
||||
}
|
||||
|
||||
bool game_state_get_pause() {
|
||||
GameState* game_state = game_state_get();
|
||||
SubGameStateData* sub_game_state_data = sub_game_state_data_array_get(game_state->sub_game_state);
|
||||
if (sub_game_state_data)
|
||||
return sub_game_state_data->pause;
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t game_state_print(char* buf, size_t buf_size) {
|
||||
GameState* game_state = game_state_get();
|
||||
const char* game_state_name = game_state_names[game_state->game_state];
|
||||
@@ -1981,8 +1989,8 @@ void test_mode_set(bool value) {
|
||||
}
|
||||
|
||||
static bool game_state_call_sub(GameState* game_state) {
|
||||
SubGameStateData* v2 = sub_game_state_data_array_get(game_state->sub_game_state);
|
||||
if (!v2) {
|
||||
SubGameStateData* sub_game_state_data = sub_game_state_data_array_get(game_state->sub_game_state);
|
||||
if (!sub_game_state_data) {
|
||||
game_state->sub_call_count++;
|
||||
return false;
|
||||
}
|
||||
@@ -1990,13 +1998,13 @@ static bool game_state_call_sub(GameState* game_state) {
|
||||
bool(*func)() = 0;
|
||||
switch (game_state->sub_mode) {
|
||||
case 0:
|
||||
func = v2->Init;
|
||||
func = sub_game_state_data->Init;
|
||||
break;
|
||||
case 1:
|
||||
func = v2->Ctrl;
|
||||
func = sub_game_state_data->Ctrl;
|
||||
break;
|
||||
case 2:
|
||||
func = v2->Dest;
|
||||
func = sub_game_state_data->Dest;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ enum SubGameStateEnum {
|
||||
extern void game_state_init();
|
||||
extern void game_state_ctrl();
|
||||
extern GameStateEnum game_state_get_game_state();
|
||||
extern bool game_state_get_pause();
|
||||
extern size_t game_state_print(char* buf, size_t buf_size);
|
||||
extern void game_state_set_game_state_next(GameStateEnum state);
|
||||
extern void game_state_set_sub_game_state_next(SubGameStateEnum state);
|
||||
|
||||
@@ -1145,14 +1145,16 @@ static void render_context_ctrl(render_context* rctx) {
|
||||
|
||||
rctx_ptr = rctx;
|
||||
input_state_ctrl();
|
||||
game_state_ctrl();
|
||||
if (!get_pause() || !game_state_get_pause())
|
||||
game_state_ctrl();
|
||||
rctx->ctrl();
|
||||
|
||||
if (fast_loader_speed > 1 && game_state_get_game_state() == GAME_STATE_STARTUP)
|
||||
for (int32_t i = 1; i < fast_loader_speed; i++) {
|
||||
rctx_ptr = rctx;
|
||||
input_state_ctrl();
|
||||
game_state_ctrl();
|
||||
if (!get_pause() || !game_state_get_pause())
|
||||
game_state_ctrl();
|
||||
rctx->ctrl();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user